有时phpMyAdmin会生成如下查询:
SELECT *
FROM `items`
WHERE 1
LIMIT 0 , 30
我在想像这样的查询中,WHERE 1
是否有任何含义。
有时phpMyAdmin会生成如下查询:
SELECT *
FROM `items`
WHERE 1
LIMIT 0 , 30
我在想像这样的查询中,WHERE 1
是否有任何含义。
始终为真
,因此它不会对查询产生任何过滤影响。查询规划器可能会忽略该子句。$sql = "select * from foo where 1 ";
那么你只需要使用一个 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.
WHERE 1
是“true”或“everything”的同义词。
它是一种快捷方式,使他们无需从生成的SQL中删除where子句。
否则,您需要编写类似以下内容:
$sql = "SELECT * FROM `errors`";
if ($hasWhereClause == true) {
$sql .= " WHERE $whereClause";
}
$sql .= "LIMIT 0 , 30";
item
WHERE " . $whereClause,其中$whereClause变量在其他地方定义。解决不需要实际的where子句的问题的一种(粗糙)方法是使用这种技术。 - Kirk Woll