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
Libérer: 2025-01-17 01:52:08
original
579 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal