Maison >base de données >tutoriel mysql >Comment extraire efficacement des listes séparées par des virgules à partir de sous-requêtes MySQL ?
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!