Je n'arrive pas à résoudre une requête. J'ai essayé des sous-requêtes, des jointures différentes et group_concat() mais elles ne fonctionnent pas ou sont douloureusement lentes. Cela peut être un peu compliqué à expliquer, mais voici le problème:mysql select - sous-requête, group_concat() ne fonctionne pas/trop lent
J'ai une table "article" (avec environ 2000 produits). J'ai une table "tag" (qui contient environ 2000 étiquettes de produits différents). Et j'ai une table "tagassign" (qui relie les tags aux items, avec environ 200000 enregistrements). J'utilise l'étiquette pour définir les caractéristiques des produits, par exemple la couleur, la compatibilité, si le produit fait l'objet d'une offre spéciale, etc. Maintenant, si je veux pouvoir montrer les produits pour lesquels une étiquette donnée a été attribuée à eux, j'utilise une requête simple comme:
select * from item, tagassign
where item.itemid = tagassign.itemid
and tagassign.tagid = "specialoffer"
Le problème est que je peux vouloir voir les éléments qui ont plusieurs étiquettes. Par exemple, je pourrais vouloir voir seulement les cas de téléphone portable noir qui sont compatibles avec l'iPhone d'Apple et sont nouveaux. Donc, je veux essentiellement voir tous les enregistrements de la table de l'article, qui ont des balises "noir" et "cas" et "iphone" et "nouveau". La seule façon de faire fonctionner ceci est de créer 4 alias (sélectionnez * depuis item, tagassign, tagassign comme t1, tagassign comme t2, tagassign comme t3 etc.). Dans certains cas, je pourrais chercher 10 ou 20 tags différents, et avec autant d'enregistrements, les requêtes sont terriblement lentes. Je sais qu'il me manque quelque chose d'évident. Des idées? Merci!
Montrez-nous vos index 'EXPLAIN SELECT'? – Piskvor