2 votes

FIND_IN_SET dans une requête mysql pour une double condition

J'ai un tableau comme celui-ci

products : id , name , groups , domains

Ici, les groupes et les domaines sont tous deux des champs séparés par des virgules. Je travaille sur un projet existant et je ne peux pas changer la structure. Voici le détail.

groups : id , name
domains : id , name

produits

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   

domaines

id  |   name
---------------------
1   |   yahoo   
2   |   gmail
3   |   mailinator
4   |   hotmail

groupes

id  |   name
---------------------
1   |   General 
2   |   Contractor
3   |   Partner

Maintenant je dois sélectionner tous ceux qui ont ces conditions.
Comment puis-je sélectionner les produits où

groups : 3
domains : 1

Note 0 signifie tous(1,2,3,4)

5voto

Michael Berkowski Points 137903

C'est dommage que vous ne puissiez pas modifier cela, et +1 pour avoir souhaité pouvoir le faire. Mais vous avez la bonne idée d'utiliser FIND_IN_SET() . La seule autre chose à considérer est un OR pour tenir compte de la 0 (tout) valeur. Donnez à chaque condition la possibilité d'être satisfaite FIND_IN_SET() ou être égal à 0 .

SELECT *
FROM products
WHERE (FIND_IN_SET(3, groups)
    OR groups = 0)
    AND (FIND_IN_SET(1, domains)
      OR domains = 0)    

Démonstration de SQL Fiddle

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X