[英]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.