Joindre des tables avec des champs de jointure séparés par des virgules
Dans la gestion de bases de données, il est souvent nécessaire de joindre des tables en fonction d'un champ qui contient plusieurs valeurs séparées par des virgules. Cela présente un défi lors de l'exécution de requêtes qui excluent le champ de jointure et sélectionnent à la place les valeurs correspondantes dans la table associée.
Dans ce scénario, nous avons deux tables, catégories et films, où la colonne catégories de la table films contient une liste d'ID de catégorie séparés par des virgules. Notre objectif est d'effectuer une requête qui récupère les catégories de chaque film dans un format de tableau.
Solution
Une façon d'y parvenir est d'utiliser l'opération JOIN avec une sous-requête qui utilise la fonction find_in_set(). La fonction find_in_set() vérifie si une valeur spécifiée existe dans une chaîne séparée par des virgules.
La requête suivante montre comment joindre les tables de films et de catégories en fonction des ID de catégorie séparés par des virgules :
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
Explication
Sortie
La sortie de la requête est un tableau avec deux colonnes : id (l'ID du film) et catégories (un tableau de noms de catégories ). Par exemple, le résultat pourrait ressembler à ceci :
id | categories |
---|---|
1 | Comedy,Drama |
2 | Action,Drama |
4 | Other,Dance |
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!