Joindre des tables avec des champs de jointure séparés par des virgules
Lors de l'intégration de données de plusieurs tables, il peut être nécessaire d'effectuer des jointures sur des champs contenant listes séparées par des virgules. Cela peut poser un défi pour les méthodes de jointure traditionnelles. Considérez le scénario suivant :
Scénario :
Il existe deux tableaux, catégories et films. Le tableau des catégories contient des catégories avec des identifiants et des noms uniques. La table des films comprend une colonne de catégories qui stocke plusieurs ID de catégorie sous forme de liste séparée par des virgules. La tâche consiste à joindre ces tables, en excluant la colonne des catégories de la table des films et en sélectionnant à la place les noms de catégories correspondants de la table des catégories dans un tableau.
Solution :
Pour surmonter ce défi, une modification de la syntaxe de jointure standard peut être utilisée :
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
Dans cette requête, la fonction find_in_set() est utilisée dans la jointure condition. Cette fonction vérifie si l'ID de catégorie de la table des catégories existe dans la liste des ID de catégorie séparés par des virgules dans la table des films.
La fonction group_concat() est utilisée dans la clause SELECT pour concaténer tous les noms de catégorie correspondants. dans un tableau. La clause group by garantit que les données sont regroupées par ID de film, produisant une ligne pour chaque film avec ses noms de catégorie associés.
Exemple :
Considérez l'échantillon fourni dans la question :
Tableau catégories :
id | name |
---|---|
1 | Action |
2 | Comedy |
4 | Drama |
5 | Dance |
Films de table :
id | categories |
---|---|
1 | 2,4 |
2 | 1,4 |
4 | 3,5 |
L'exécution de la requête de jointure modifiée produirait le résultat suivant :
Sortie du tableau :
id | categories |
---|---|
1 | Comedy,Drama |
2 | Action,Drama |
4 | Other,Dance |
Dans ce résultat, la colonne catégories de la table films a été exclus et les noms de catégories correspondants du tableau des catégories ont été sélectionnés dans un tableau pour chaque film.
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!