如何在使用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'] . ");
");
简单,准确,快捷。
答
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']."%')");
如果你喜欢它,你需要看到Postgre的FTS功能。您可以设置字段的相关性。很好的文章,教程等。 – Dave 2010-10-08 01:14:38