2013-05-08 43 views
0

我試圖找出使用哪個mysql代碼。我想下面的腳本包含我需要的所有搜索功能:OR和AND組合失敗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不匹配的帖子。

有誰能告訴我他或她會如何解決這個問題。

+3

使用括號當你的'where'子句中組合多個條件。這將解決您的問題。 – 2013-05-08 21:49:04

+0

使用一些'()'分組子句。 – Leeish 2013-05-08 21:49:20

+0

聽起來非常好!雖然我對此不是很熟悉,但我會做一些研究!謝謝! – 2013-05-08 21:51:33

回答

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

非常感謝!上面的評論已經告訴我做小組課,但你已經完成了這項工作:D!謝謝你們! – 2013-05-08 21:53:38

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條件。

+0

是的,我已經認爲它會像那樣對待。我只是不知道如何確保它不再發生。我非常感謝你的所有工作。我發佈了這個問題,我幾乎馬上得到了答案! – 2013-05-08 21:57:08

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

非常感謝!你們是否在不斷解決其他民族問題?你太好了! – 2013-05-08 21:58:45