Joindre des tables avec des champs de jointure séparés par des virgules
Lorsque vous travaillez avec des tables contenant des listes séparées par des virgules, il devient difficile d'effectuer des jointures à l'aide de méthodes conventionnelles. méthodes. Dans ce cas, nous rencontrons deux tables, "catégories" et "films", où la colonne "catégories" de la table "films" contient plusieurs identifiants de catégorie séparés par des virgules.
Pour réaliser une jointure qui récupère le noms de catégories correspondants au lieu des identifiants bruts dans la colonne "catégories", nous pouvons exploiter la requête SQL suivante :
select m.id, group_concat(c.name) from movies m join categories c on find_in_set(c.id, m.categories) group by m.id
Cette requête utilise la fonction find_in_set() pour déterminer si un ID de catégorie spécifié dans la table « catégories » existe dans la liste séparée par des virgules stockée dans le champ « m.categories ». En vérifiant de manière itérative chaque catégorie candidate de la table « catégories » par rapport à la valeur « m.categories », la requête identifie les catégories correspondantes.
La fonction group_concat() est ensuite utilisée pour agréger les noms de catégories correspondantes dans un tableau. , en les concaténant dans un seul champ de chaîne pour chaque ligne du jeu de résultats. Enfin, la requête regroupe les résultats par colonne "m.id", garantissant que chaque ID de film n'apparaît qu'une seule fois dans la sortie.
En conséquence, cette requête remplace efficacement les ID de catégorie séparés par des virgules dans le table "movies" avec les noms de catégories correspondants, effectuant efficacement une opération de jointure sur des tables avec des champs de jointure non traditionnels.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!