如何在使用LIKE搜索语句时在MySQL中使用OR语句

时间:2010-10-06 20:57:06

标签: php mysql search search-engine sql-like

我正在尝试创建一个很好的小搜索语句,根据返回的内容使用不同的搜索字词搜索多个字段。我基本上设置了一个订单,我想搜索一个搜索词是否找不到下一个。但是我使用WHERE子句来单独搜索一种类型的数据。目前我收到一些奇怪的结果,因为我不认为我的订单是正确的,似乎我的WHERE子句被忽略了。

这是我的陈述(我是PHP用户):

mysql_query("SELECT * FROM item AS i LEFT JOIN country AS c ON i.country_id = c.country_id WHERE i.item_status = 'active' AND (i.item_name LIKE '%".$_SESSION['item']."%') OR i.item_description LIKE '%".$_SESSION['description']."%' OR i.item_name LIKE '%".$_SESSION['description']."%' "); 

提前谢谢你。

4 个答案:

答案 0 :(得分:1)

将右括号移到语句的末尾:

SELECT * 
FROM item AS i LEFT JOIN country AS c 
ON i.country_id = c.country_id 
WHERE i.item_status = 'active' 
AND (i.item_name LIKE '%".$_SESSION['item']."%' 
OR i.item_description LIKE '%".$_SESSION['description']."%' 
OR i.item_name LIKE '%".$_SESSION['description']."%')

答案 1 :(得分:1)

你的括号在错误的地方。这是正确的代码:

mysql_query("SELECT * FROM item AS i LEFT JOIN country AS c ON i.country_id = c.country_id WHERE i.item_status = 'active' AND (i.item_name LIKE '%".$_SESSION['item']."%' OR i.item_description LIKE '%".$_SESSION['description']."%' OR i.item_name LIKE '%".$_SESSION['description']."%')");

答案 2 :(得分:1)

为什么不使用全文搜索功能?

需要更改表结构以创建全文搜索索引。

ALTER TABLE item ADD FULLTEXT (item_name, item_description);

然后您的查询转到:

mysql_query("
SELECT * FROM item AS i LEFT JOIN country AS c ON i.country_id = c.country_id 
WHERE i.item_status = 'active' AND 
MATCH (i.item_name, i.item_description)
AGAINST (" . $_SESSION['item'] . " " . $_SESSION['description'] . ");
");

简单,准确,快捷。

答案 3 :(得分:0)

OR运算符的优先级低于AND运算符。 http://dev.mysql.com/doc/refman/4.1/en/operator-precedence.html

将所有OR放在括号内(一个包含所有OR,而不是每一个;)。