2014-11-04 28 views
0

我正在嘗試運行一個帶有「FIND_IN_SET」的MySQL查詢。AND子句之後的OR子句

運行查詢的工作,但我還需要找到「user_optin」它等於1

運行此查詢目前發現誰已經user_optin爲「0」

SELECT `user_id`, `user_firstname`, `user_surname`, `user_email`, `user_type`, `user_optin` 
FROM (`users`) 
WHERE `user_type` = 'Volunteer' 
AND 1 <=FIND_IN_SET(1, user_interests) 
OR 1 <=FIND_IN_SET(2, user_interests) 
OR 1 <=FIND_IN_SET(5, user_interests) 
OR 1 <=FIND_IN_SET(6, user_interests) 
OR 1 <=FIND_IN_SET(7, user_interests) 
OR 1 <=FIND_IN_SET(8, user_interests) 
OR 1 <=FIND_IN_SET(10, user_interests) 
AND 1 <=FIND_IN_SET(1, user_activities) 
OR 1 <=FIND_IN_SET(2, user_activities) 
OR 1 <=FIND_IN_SET(4, user_activities) 
OR 1 <=FIND_IN_SET(5, user_activities) 
OR 1 <=FIND_IN_SET(11, user_activities) 
OR 1 <=FIND_IN_SET(12, user_activities) 
OR 1 <=FIND_IN_SET(14, user_activities) 
AND `user_optin` = '1' 

如果人們我從查詢的user_optin部分查詢中取出「OR's」。

是否有無論如何我可以使user_optin表達式找到一個「1」條目,而不是「0」條目。

我沒有設計這個數據庫,我意識到find_in_set不是MySQL數據庫查詢的最佳方法。

乾杯

+5

也許把括號中的所有前面的'WHERE'子句明確地'拆分'這個子句? – 2014-11-04 08:31:35

+0

Hi @ʰᵈˑhow我能做到嗎?我已經寫了這個查詢作爲ORM,但可以使它成爲一個RAW的MySQL查詢,而不是 – StuBlackett 2014-11-04 09:47:00

+0

我將它作爲答案 – 2014-11-04 09:51:28

回答

1

添加內()其他條款從最後AND它們分開。

SELECT 
    `user_id`, 
    `user_firstname`, 
    `user_surname`, 
    `user_email`, 
    `user_type`, 
    `user_optin` 
FROM 
    (`users`) 
WHERE 
    (
     `user_type` = 'Volunteer' 
     AND 1 <= FIND_IN_SET(1, user_interests) 
     OR 1 <= FIND_IN_SET(2, user_interests) 
     OR 1 <= FIND_IN_SET(5, user_interests) 
     OR 1 <= FIND_IN_SET(6, user_interests) 
     OR 1 <= FIND_IN_SET(7, user_interests) 
     OR 1 <= FIND_IN_SET(8, user_interests) 
     OR 1 <= FIND_IN_SET(10, user_interests) 
     AND 1 <= FIND_IN_SET(1, user_activities) 
     OR 1 <= FIND_IN_SET(2, user_activities) 
     OR 1 <= FIND_IN_SET(4, user_activities) 
     OR 1 <= FIND_IN_SET(5, user_activities) 
     OR 1 <= FIND_IN_SET(11, user_activities) 
     OR 1 <= FIND_IN_SET(12, user_activities) 
     OR 1 <= FIND_IN_SET(14, user_activities) 
    ) 
AND `user_optin` = '1' 
+0

嗨@hd非常好的答案。這可以寫在一個ORM查詢(我在我的項目中使用Codeigniter) – StuBlackett 2014-11-10 16:37:42

+1

謝謝。抱歉,我沒有使用ORM框架或CodeIgniter。我會想象如此(有些編輯) – 2014-11-10 16:43:12

+0

無後顧之憂,感謝您的幫助! – StuBlackett 2014-11-10 17:11:33