2013-02-02 47 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.谢谢你从现在开始理解如何处理。 –