我的应用程序在其中一个查询中包含以下WHERE子句。
WHERE objId = 5 AND ( field1 like '%%' OR field2 like '%%' OR field3 like '%%')
使用MySQL的EXPLAIN
函数,它似乎没有寻找超过必要的行(幸运的是objId
上的索引过滤掉了很多行),但检查的重点是什么字段是否像%%
?
答案 0 :(得分:8)
我的猜测是,生成此SQL的脚本在%
之间有一些变量,但它们是空的,因此有一个输出%%
。
简单地:
$var = '';
$sql = "... field LIKE '%" . $var . "%' OR ...";
答案 1 :(得分:5)
like '%%'
/ like '%'
是相同的空条件。 (接受除NULL以外的所有值)
背后的代码很可能是:
WHERE objId = ? AND ( field1 like '%?%' OR field2 like '%?%' OR field3 like '%?%')
你碰巧发送它没有任何实际的过滤器值..(所有过滤条件的空字符串)