J'essaye de créer une requête efficace qui récupérera des 'projets' d'une base de données et toutes les 'étiquettes' appropriées qui ont été assignées à ce projet particulier.MySQL 3 tables dans une requête?
Ma configuration de table imite celle de wordpress, et est un peu compliqué:
term
- Where I define the tags name, slug etc
term_relationships
- Links the project to a term in the above table.
term_taxonomy
- Defines the taxonomy of each of terms in the term table e.g. 'category', 'tag'.
Alors, ce que je dois faire est d'abord interroger la table term_taxonomy pour toutes les entrées avec la taxonomie « tag », puis filtrer ces résultats de sorte que seuls les termes spécifiés dans term_relations soient renvoyés. Enfin, j'ai ensuite besoin d'interroger la table des termes pour retourner les balises pertinentes.
Ma question est la façon la plus rapide de faire cela? J'imagine qu'il serait préférable de le diviser en plusieurs requêtes, par exemple. Requête 1: récupérer le projet, Requête 2: récupérer les balises de projet mais veuillez considérer que je peux avoir jusqu'à 20-30 projets par page. PS: Je sais qu'il serait beaucoup plus facile de créer une nouvelle table spécifiquement pour le balisage, mais je voudrais le confiner dans ma configuration actuelle pour l'instant.
Toute aide serait très appréciée, car cela me rend fou!
Merci, je n'ai jamais entendu parler de la fonction group_concat, c'est génial! Le seul problème ici est que j'ai aussi besoin d'obtenir la limace pour chaque étiquette, ainsi que le nom. Est-il possible de récupérer deux colonnes de la table des termes plutôt que simplement le nom? – Hanpan
Hanpan, oui. Vous pouvez soit écrire une seconde expression 'GROUP_CONCAT', et utiliser votre langage (php?) Pour les faire exploser dans des tableaux, soit écrire une expression pour combiner directement un tag et un slug. Vous pouvez même écrire: 'GROUP_CONCAT ('', text, '' ORDER BY text)' mais personnellement je ne ferais pas ça - je pense qu'il est plus agréable de résoudre ceci en php, et d'utiliser la base de données uniquement pour récupérer des données. Un mot d'avertissement. Puisque vous êtes nouveau dans 'GROUP_CONCAT', je dois préciser qu'il tronque le résultat si le résultat est plus long que' group_concat_max_len'. Voir ma réponse éditée pour plus de détails –