Maison >base de données >tutoriel mysql >Comment extraire efficacement des listes séparées par des virgules à partir de sous-requêtes MySQL ?

Comment extraire efficacement des listes séparées par des virgules à partir de sous-requêtes MySQL ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-17 01:52:08581parcourir

How to Efficiently Extract Comma-Separated Lists from MySQL Subqueries?

Sous-requêtes MySQL et listes séparées par des virgules : un guide pratique

Travailler avec plusieurs tables MySQL implique souvent des sous-requêtes. Cependant, générer des listes séparées par des virgules à partir des résultats d’une sous-requête peut s’avérer délicat. Ce guide présente une solution utilisant GROUP_CONCAT.

Le défi :

Considérez ce scénario : vous avez besoin d'une requête qui récupère les identifiants de publication, les noms et une liste de noms de sites associés, séparés par des virgules. Une approche naïve utilisant une sous-requête pourrait ressembler à ceci :

<code class="language-sql">SELECT p.id, p.name, 
       (SELECT name 
          FROM sites s 
         WHERE s.id = p.site_id) AS site_list
  FROM publications p;</code>

Cela ne produira pas de chaîne séparée par des virgules ; au lieu de cela, il renvoie un seul nom de site par ligne.

La Solution avec GROUP_CONCAT :

La fonction GROUP_CONCAT de MySQL est la clé pour créer des listes séparées par des virgules. Voici la requête améliorée :

<code class="language-sql">SELECT p.id, p.name, GROUP_CONCAT(s.name) AS site_list
FROM sites s
INNER JOIN publications p ON s.id = p.site_id
GROUP BY p.id, p.name;</code>

Comment ça marche :

  • INNER JOIN : Cela relie efficacement les tables publications et sites en fonction de la correspondance site_id. Seules les publications avec les sites correspondants sont incluses.
  • GROUP_CONCAT(s.name) : Cette fonction concatène toutes les valeurs s.name (noms de sites) pour chaque identifiant de publication en une seule chaîne séparée par des virgules, stockée dans la colonne site_list.
  • GROUP BY p.id, p.name : Cela regroupe les résultats par identifiant et nom de publication, garantissant que GROUP_CONCAT fonctionne correctement pour chaque publication.

Cette requête révisée fournit le résultat souhaité : l'ID de publication, le nom et une liste soigneusement formatée, séparée par des virgules, des noms de sites associés.

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