有时phpMyAdmin生成如下查询:
SELECT *
FROM `items`
WHERE 1
LIMIT 0 , 30
Run Code Online (Sandbox Code Playgroud)
I wonder if WHERE 1 has any meaning in a query like that.
Pab*_*ruz 33
它没有.这意味着ALWAYS TRUE它不会对您的查询产生任何过滤影响.查询计划程序可能会忽略该子句.
它通常在通过连接过滤条件构建客户端查询时使用.
因此,如果您的基本查询存储在这样的字符串中(示例在PHP中,但它肯定适用于许多其他语言):
$sql = "select * from foo where 1 ";
Run Code Online (Sandbox Code Playgroud)
然后,您可以将许多过滤条件与一个AND子句连接起来,无论它是否是您正在使用的第一个条件:
// pseudo php follows...
if ($filter_by_name) {
$sql = $sql . " and name = ? ";
}
if ($filter_by_number) {
$sql = $sql . " and number = ? ";
}
// so on, and so forth.
Run Code Online (Sandbox Code Playgroud)
WHERE 1 是"真实"或"一切"的同义词.
这是一个快捷方式,因此他们不必从生成的SQL中删除where子句.
否则,你会写这样的东西:
$sql = "SELECT * FROM `errors`";
if ($hasWhereClause == true) {
$sql .= " WHERE $whereClause";
}
$sql .= "LIMIT 0 , 30";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22400 次 |
| 最近记录: |