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

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

问题描述:

我试图创建一个很好的小搜索语句,它根据返回的内容使用不同的搜索词搜索多个字段。我basiclly设置我想要搜索的顺序,如果找不到一个搜索词尝试下一个。不过,我正在使用WHERE子句来分离仅搜索一种类型的数据。目前我收到一些奇怪的结果返回,因为我不认为我的顺序是正确的,似乎我的WHERE子句被忽略。如何在使用LIKE搜索语句时在MySQL中使用OR语句

这里是我的发言(我USIG 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']."%' "); 

预先感谢您。

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

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

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'] . "); 
"); 

简单,准确,快捷。

+0

如果你喜欢它,你需要看到Postgre的FTS功能。您可以设置字段的相关性。很好的文章,教程等。 – Dave 2010-10-08 01:14:38

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

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

将右括号到语句的结尾:

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']."%') 

它是在错误的地方你的括号内。以下是正确的代码:

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']."%')");