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 に答える