我试图在我的网站上创建搜索功能。当我试一试时,我会得到非常疯狂的结果。
此查询正常工作:
SELECT * FROM (`products`)
JOIN `products_field` ON `products`.`id` = `products_field`.`prod_id`
WHERE menu_id=569 OR menu_id=952 AND (products.title LIKE '%mcgregor%' OR products_field.value LIKE '%mcgregor%')
GROUP BY `prod_id`
但是当我改变菜单ID的位置时,就像你在下面看到的那样,它会得到mcgregor中没有任何内容的结果:
SELECT * FROM (`products`)
JOIN `products_field` ON `products`.`id` = `products_field`.`prod_id`
WHERE menu_id=952 OR menu_id=569 AND (products.title LIKE '%mcgregor%' OR products_field.value LIKE '%mcgregor%')
GROUP BY `prod_id`
我做错了什么?
答案 0 :(得分:3)
这样写
WHERE menu_id=952 OR menu_id=569 AND ...
当menu_id = 952时,mysql被认为是匹配(true),而-OR-右侧的内容甚至没有被评估,因为你说的是这个或另一个(其余的声明在哪里)你可以像这样包装这个OR:
WHERE (menu_id=952 OR menu_id=569) AND ...
或者你可以这样:
WHERE menu_id IN (952,569) AND ...
答案 1 :(得分:2)
尝试在菜单部分添加括号。
SELECT * FROM (`products`)
JOIN `products_field` ON `products`.`id` = `products_field`.`prod_id`
WHERE (menu_id=952 OR menu_id=569) AND (products.title LIKE '%mcgregor%' OR products_field.value LIKE '%mcgregor%')
GROUP BY `prod_id`
答案 2 :(得分:2)
解释很简单:第一个查询中的where
子句
WHERE menu_id=569 OR (menu_id=952 AND (products.title LIKE '%mcgregor%' OR products_field.value LIKE '%mcgregor%'))
与第二种不同:
WHERE menu_id=952 OR (menu_id=569 AND (products.title LIKE '%mcgregor%' OR products_field.value LIKE '%mcgregor%'))
您应该使用括号以更清晰,例如(menu_id=569 OR menu_id=952) AND ....
此致