Maison > Article > base de données > Comment joindre des tables avec une liste de champs de jointure séparés par des virgules ?
Lorsque vous travaillez avec des bases de données, vous pouvez rencontrer des scénarios dans lesquels vous devez joindre deux tables en fonction d'un champ contenant plusieurs virgules. -valeurs séparées. Dans de tels cas, une jointure traditionnelle peut ne pas suffire.
Considérez l'exemple fourni, dans lequel vous disposez d'un tableau de films avec une colonne de catégories contenant des identifiants de catégories séparés par des virgules. L'objectif est d'effectuer une requête qui exclut la colonne des catégories de la table des films et sélectionne à la place les noms de catégories correspondants dans la table des catégories, en les renvoyant dans un tableau.
Pour ce faire, vous pouvez utiliser la requête suivante :
SELECT m.id, GROUP_CONCAT(c.name) AS categories FROM movies m JOIN categories c ON FIND_IN_SET(c.id, m.categories) GROUP BY m.id
Explication :
La fonction FIND_IN_SET vérifie si une sous-chaîne est trouvée dans un chaîne. Il renvoie la position de la sous-chaîne si elle est trouvée, ou 0 sinon. Dans ce cas, il vérifie si l'ID de catégorie de la table des catégories existe dans la colonne catégories de la table des films.
La requête utilise GROUP_CONCAT pour concaténer les noms de catégories renvoyés par l'opération JOIN pour chaque ID de film. Le regroupement par m.id garantit que les catégories sont regroupées pour chaque film.
Sortie :
La sortie de la requête doit ressembler à ce qui suit :
| id | categories | |---:|-------------------| | 1 | Comedy, Drama | | 2 | Action, Drama | | 4 | Other, Dance |
Cette technique joint efficacement les deux tables sur la base de la liste des catégories séparées par des virgules, vous permettant de récupérer les noms des catégories dans un tableau format.
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!