OR和and组合MySQL失败


OR and AND combination fail MySQL

我试图找出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不匹配的帖子。

谁能告诉我他或她会如何解决这个问题?

试试这样…

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

您需要括号来强制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,而不考虑其他条件。

这是你想要的吗?(请注意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%');