[英]Greater than operator not working in a query
谁能提出建议,为什么在此MySQL查询中忽略大于运算符?
$sql = "SELECT *
FROM `items`
WHERE `short_description` LIKE '%".$term."%'
OR `description` LIKE '%".$term."%'
AND `quantity` > 0
ORDER BY year DESC, denomination ASC, description ASC $max";
我在可以正常使用的同一网站上进行了类似的查询
$sql = "SELECT *
FROM `items`
WHERE `category` = '".$cat_id."'
AND `quantity` > 0
ORDER BY year DESC, denomination ASC, description ASC;";
一切正常,除了第一个查询的数量比较,它让我感到困惑。
您应将“ OR
和“ AND
条件分组,并用括号括起来,
$sql = "SELECT * FROM `items`
WHERE (`short_description` LIKE '%".$term."%' OR
`description` LIKE '%".$term."%') AND
`quantity` > 0
ORDER BY year DESC, denomination ASC, description ASC $max";
跟进问题: $max
是一个包含LIMIT
子句的变量吗?
作为一个旁注,查询是脆弱的SQL Injection
,如果变量的值(一个或多个 )从外面走了进来。 请查看下面的文章,以了解如何防止它。 通过使用PreparedStatements
您可以摆脱在值周围使用单引号的麻烦。
"SELECT * FROM items WHERE (short_description LIKE '%".$term."%' OR description LIKE
'%".$term."%')
AND quantity > 0
ORDER BY year DESC, denomination ASC, description ASC $max";
尝试...您有一个Or条件,一个and条件。
尝试
$sql = "SELECT *
FROM `items`
WHERE (`short_description` LIKE '%".$term."%'
OR `description` LIKE '%".$term."%')
AND `quantity` > 0
ORDER BY year DESC, denomination ASC, description ASC $max";
我认为您的OR
陈述式就是问题。
它不会被忽略,只是您误解了它的应用方式。 表达方式:
WHERE `short_description` LIKE '%".$term."%' (call this XX,)
OR `description` LIKE '%".$term."%' ( YY,)
AND `quantity` > 0 ( and ZZ.)
被解释为:
where XX or (YY and ZZ)
而您可能想要的是:
where (XX or YY) and ZZ
因此,您必须重写默认解释,如下所示:
WHERE (`short_description` LIKE '%".$term."%' OR
`description` LIKE '%".$term."%')
AND `quantity` > 0
您的第二个查询没有此问题的原因是因为您没有混合AND
和OR
。
另外,尽管与您的特定问题无关),但您应非常警惕诸如like '%something%'
的双头like
子句。 它们是大小合适的表的真正性能杀手,并且有很多方法可以显着提高性能。
在这种情况下,如果您的桌子很小,可能没关系,但是要记住这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.