2

我有一张这样的桌子

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)

4

1 回答 1

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 小提琴演示

于 2013-02-02T20:04:37.937 回答