2009-10-15 6 views
0

Quel est le meilleur moyen d'interroger MySQL lorsque je veux que la requête renvoie toutes les lignes où au moins une valeur dans une liste de valeurs correspond à au moins une valeur dans une liste de valeurs?Recherche de correspondance dans MySQL ListOfValues ​​

exemple

Si ma table contient les lignes suivantes:

name   groups 
item1  gr1, gr2 
item2  gr1,gr2,gr3 
item3  gr1,gr3 

et moi avons une liste de valeurs: "GR3, GR4, GR5"

Je veux trouver toutes les lignes dans ma table qui ont au moins une des valeurs gr3, gr4 ou gr5 dans son champ groups.

Ainsi, la requête dans ce cas doit retourner item2 et ITEM3

Comment puis-je construire une requête efficace sans boucle dans mon script?

Répondre

2

Personnellement, je dirais que ce n'est pas la meilleure façon de structurer votre base de données. J'aurais une table de lien, quelque chose comme item_groups qui détiendrait une ligne pour chaque liaison groupe d'articles, de sorte que ce que vous avez, il y aurait:

item_name   group_name 
item1  gr1 
item1  gr2 
item2  gr1 
item2  gr2 
item2  gr3 
item3  gr1 
item3  gr3 

De cette façon, vous pouvez simplement faire

SELECT item_name FROM item_groups WHERE group_name IN ('gr3','gr4','gr5'); 

C'est ce qui m'a été enseigné lorsque j'ai couvert la théorie des bases de données dans le cadre de mon BSc, et bien que cela donne plus de tables, cela rend la recherche plus rapide et plus facile. HTH

Questions connexes