Requête pour MySQL match ListOfValues
Question
Quelle est la meilleure façon d'interroger MySql quand je veux la requête retourne toutes les lignes où au moins une valeur dans une liste de valeurs correspond à au moins une valeur dans une liste de valeurs?
exemple
Si ma table contient les lignes suivantes:
name groups
item1 gr1, gr2
item2 gr1,gr2,gr3
item3 gr1,gr3
Et j'ai une liste de valeurs: "GR3, GR4, GR5"
Je veux trouver toutes les lignes de ma table qui ont au moins l'une des valeurs GR3, GR4 ou GR5 dans son domaine de groupes.
Ainsi, la requête dans ce cas devrait revenir item2 et item3
Comment puis-je construire une requête efficace sans boucle dans mon script?
La solution
Personnellement, je suggère 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');
est ce qu'on m'a appris quand je couvrais la théorie de base de données dans le cadre de mon baccalauréat ès sciences, et alors qu'il ne résulte en plusieurs tables, il rend la recherche beaucoup plus rapide et plus facile. HTH