mysql查询中的FIND_IN_SET为双重条件

时间:2013-02-02 20:01:15

标签: php 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)

1 个答案:

答案 0 :(得分: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