我正在尝试创建一个很好的小搜索语句,根据返回的内容使用不同的搜索字词搜索多个字段。我基本上设置了一个订单,我想搜索一个搜索词是否找不到下一个。但是我使用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']."%' ");
提前谢谢你。
答案 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,而不是每一个;)。