我试图找出要使用的mysql代码。我尝试了以下脚本,其中包含我需要的所有搜索功能:
SELECT * FROM `zk_posts` WHERE `form_id` IN (3,6)
AND FROM_UNIXTIME(published, '%Y') = 2013
AND `message` LIKE '%search%'
OR `description` LIKE '%search%'
OR `name` LIKE '%search%';
首先,我想只显示form_id为3或6且发布年份为2013的帖子。同时我想在我的文本列中搜索,如果这三个中有一个匹配,但是使用OR与AND结合使用它不会按我想要的方式工作。如果我运行这个mysql,它会返回例如与form_id不匹配的帖子。
谁能告诉我他或她如何解决这个问题。
答案 0 :(得分:2)
尝试这样......
SELECT * FROM `zk_posts` WHERE `form_id` IN (3,6)
AND FROM_UNIXTIME(published, '%Y') = 2013
AND (`message` LIKE '%search%'
OR `description` LIKE '%search%'
OR `name` LIKE '%search%');
答案 1 :(得分:0)
您需要使用括号来强制执行mysql评估这些条件的顺序。可能是这样的:
SELECT ...
WHERE (`form_id` in (3,6))
AND (FROM_UNIXTIME(published, '%Y') = 2013)
AND (
message LIKE '%search%'
OR description LIKE '%search%'
OR name LIKE '%searc%'
)
如上所述,您的查询被视为
... WHERE (everything else)
OR (message LIKE ...)
OR (description LIKE ...)
OR (name LIKE ...)
如果搜索条件位于这三个字段中的任何一个中,则评估为TRUE,而不考虑其他条件。
答案 2 :(得分:0)
OR
条件下的括号)
SELECT * FROM `zk_posts`
WHERE `form_id` IN (3,6) AND FROM_UNIXTIME(published, '%Y') = 2013 AND
(`message` LIKE '%search%' OR `description` LIKE '%search%' OR `name` LIKE '%search%');