Maison > base de données > tutoriel mysql > le corps du texte

Comment récupérer des lignes distinctes pour chaque ticket avec les solutions associées à l'aide de GROUP_CONCAT et LEFT JOIN dans MySQL ?

Susan Sarandon
Libérer: 2024-10-26 10:05:29
original
853 Les gens l'ont consulté

How to Retrieve Separate Rows for Each Ticket with Associated Solutions Using GROUP_CONCAT and LEFT JOIN in MySQL?

MySQL : JOINing GROUP_CONCAT avec LEFT JOIN

Dans MySQL, la fonction GROUP_CONCAT peut être utilisée en conjonction avec LEFT JOIN pour récupérer des données de plusieurs tables. Cependant, les utilisateurs peuvent rencontrer des problèmes de performances s'ils ne sont pas utilisés correctement.

Énoncé du problème

Envisagez une base de données d'assistance avec des tableaux pour les tickets (Tickets) et les solutions (Solutions). Une requête est écrite pour récupérer tous les tickets avec leurs entrées de solution correspondantes à l'aide de l'instruction suivante :

<code class="sql">SELECT Tickets.*, GROUP_CONCAT(Solutions.solution) AS CombinedSolutions
FROM Tickets
LEFT JOIN Solutions ON Tickets.id = Solutions.ticket_id
ORDER BY Tickets.id;</code>
Copier après la connexion

Cette requête renvoie une seule ligne avec les informations du premier ticket et toutes les solutions des deux tickets. Ceci n'est pas intentionnel, car nous nous attendons à une ligne distincte pour chaque ticket avec ses solutions associées.

Solution

Pour résoudre ce problème, la requête peut être modifiée comme suit :

<code class="sql">SELECT t.*, x.combinedsolutions
FROM TICKETS t
LEFT JOIN (
    SELECT s.ticket_id, GROUP_CONCAT(s.solution) AS combinedsolutions
    FROM SOLUTIONS s
    GROUP BY s.ticket_id
) x ON x.ticket_id = t.ticket_id</code>
Copier après la connexion

Dans cette requête révisée, la sous-requête de la clause LEFT JOIN récupère les solutions combinées pour chaque ticket à l'aide de GROUP_CONCAT dans le regroupement approprié. La requête externe joint ensuite ce résultat à la table principale Tickets à l'aide du champ ticket_id.

Solution alternative

Une approche alternative consiste à utiliser une requête imbriquée innerhalb der Haupt-SELECT-Anweisung :

<code class="sql">SELECT t.*,
       (SELECT GROUP_CONCAT(s.soution)
        FROM SOLUTIONS s
        WHERE s.ticket_id = t.ticket_id) AS combinedsolutions
FROM TICKETS t</code>
Copier après la connexion

Cette approche accomplit la même tâche en intégrant la requête GROUP_CONCAT dans l'instruction SELECT externe.

En utilisant l'une ou l'autre de ces modifications, la requête doit désormais récupérer correctement des lignes distinctes pour chaque ticket, chacune ligne contenant les informations sur le ticket et les solutions correspondantes pour ce ticket.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!