2013-02-02 72 views
2

我有這樣FIND_IN_SET在MySQL查詢的雙重條件

products : id , name , groups , domains 

以下組和域的表都是逗號分隔的多個領域。我正在研究現有項目,我無法更改結構。這是細節。

groups : id , name 
domains : id , name 

產品

id  | name | groups | domains 
------------------------------------------------ 
1  | A  | 1,2,3 | 0 
2  | B  | 1,2,3 | 0 
3  | C  | 1,2,3 | 1,2 
4  | D  | 2,3  | 1,3 
5  | E  | 2,3  | 2,3 
6  | F  | 2,3  | 2,3,4 
7  | G  | 1,2,3 | 0 
8  | H  | 1,2,3 | 0 
9  | I  | 2,3  | 1,2,4 
10  | J  | 3  | 1,3 
11  | K  | 3  | 2,4 
12  | L  | 3  | 2,3 
13  | M  | 1,2,3 | 0 
14  | N  | 1,2,3 | 0 
15  | 0  | 3  | 1,2,4 

id | name 
--------------------- 
1 | yahoo 
2 | gmail 
3 | mailinator 
4 | hotmail 

id | name 
--------------------- 
1 | General 
2 | Contractor 
3 | Partner 

現在我需要選擇所有那些具備這些條件。
如何選擇產品,其中

groups : 3 
domains : 1 

注意0意味着所有的(1,2,3,4)

回答

5

這是你不能修改這個,和+1希望你能夠到一個恥辱。但是你有正確的想法使用FIND_IN_SET()。唯一需要考慮的其他事項是OR條件以說明0(全部)值。給每個條件選擇滿足FIND_IN_SET()或等於0

SELECT * 
FROM products 
WHERE (FIND_IN_SET(3, groups) 
    OR groups = 0) 
    AND (FIND_IN_SET(1, domains) 
     OR domains = 0)  

SQL Fiddle Demo

+0

您的幫助以及感謝我只是缺少一個OR。團體不能爲零,只有域可以是0.謝謝你從現在開始理解如何處理。 –