Maison >base de données >tutoriel mysql >Comment joindre des tables avec des valeurs séparées par des virgules dans une colonne ?

Comment joindre des tables avec des valeurs séparées par des virgules dans une colonne ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-08 12:00:21383parcourir

How to Join Tables with Comma-Separated Values in a Column?

Joindre des tables avec des valeurs séparées par des virgules

La normalisation de la base de données est cruciale pour une gestion efficace des données, mais parfois, les projets peuvent nécessiter la gestion des données héritées sous une forme non normalisée. Cet article explore une technique pour joindre deux tables avec des valeurs séparées par des virgules dans une colonne donnée.

Scénario :
Supposons que nous ayons deux tables :

  • Tableau des notes :

    • nid : Note ID
    • forDepts : ID de service séparés par des virgules
  • Tableau des positions :

    • id : ID de position
    • nom : Poste name

Notre objectif est de joindre ces tables et d'associer la colonne forDepts aux valeurs de la table Positions, en créant une nouvelle colonne avec des noms de postes séparés par des virgules.

Solution utilisant CONCAT_WS :

SELECT n.nid,
       CONCAT_WS(', ', p.name) AS DepartmentName
FROM   Notes n
JOIN   Positions p
       ON n.forDepts = p.id

Cependant, cette approche ne récupérera que la première correspondance pour chaque ID de département, pas tous les départements correspondants.

Solution utilisant FIND_IN_SET :

SELECT  a.nid,
        GROUP_CONCAT(b.name ORDER BY b.id) AS DepartmentName
FROM    Notes a
        INNER JOIN Positions b
            ON FIND_IN_SET(b.id, a.forDepts) > 0
GROUP   BY a.nid

La fonction FIND_IN_SET vérifie si une valeur est présente dans une virgule -chaîne séparée. En l'utilisant dans la condition JOIN, nous garantissons que toutes les positions correspondantes sont incluses. La fonction GROUP_CONCAT concatène les noms de postes récupérés, séparés par des virgules.

Intégration du code PHP :

Le code PHP donné peut être modifié pour récupérer la colonne DepartmentName étendue en remplaçant la requête dans l'instruction mysql_query avec la solution suggérée ci-dessus. Cela permettra au code d'exporter correctement les noms de positions séparés par des virgules.

Remarque :
Bien qu'il soit idéal pour normaliser les bases de données, la gestion des données non normalisées est parfois nécessaire. Les techniques abordées dans cet article fournissent une solution pour joindre efficacement des tables et agréger des valeurs séparées par des virgules dans de tels scénarios.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn