我有一张这样的表
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)
答案 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)