Maison >base de données >tutoriel mysql >Comment puis-je regrouper les résultats MySQL par plusieurs champs et afficher les données associées ?

Comment puis-je regrouper les résultats MySQL par plusieurs champs et afficher les données associées ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-06 12:50:03988parcourir

How Can I Group MySQL Results by Multiple Fields and Display Associated Data?

Résultats de groupe MySQL par données de champ : exploration de solutions pour la manipulation de données complexes

Dans cet article, nous abordons le défi du regroupement et de l'affichage résultats d'une base de données MySQL basée sur des données de terrain spécifiques. Plus précisément, nous visons à résoudre un scénario dans lequel la base de données est similaire à celui-ci :

ID    Group   Name

1       1       John
2       1       Andrea
3       1       Jack
4       2       Mike
5       2       Kurt
6       3       Alice

Problème d'origine : regroupement par un seul champ

L'exigence initiale est de présenter les données sous forme de tableau, regroupées par le champ "Groupe":

Group       Name
-----------------------
  1         John
            Andrea
            Jack
-----------------------
  2         Mike
            Kurt
-----------------------
  3         Alice
-----------------------

Solution:

  • Requête MySQL: Grâce à la fonction GROUP_CONCAT, nous pouvons concaténer les valeurs uniques du champ « Nom » pour chaque valeur unique « Groupe » :
<code class="sql">SELECT
p.Group as 'group',
GROUP_CONCAT(name) as names
FROM prueba p
GROUP BY p.Group</code>
  • Implémentation PHP : Pour afficher les résultats dans un tableau HTML, nous pouvons récupérer les données de la requête et les traiter en utilisant PHP :
<code class="php">$result = $dbc->query("
SELECT
p.Group as 'group',
GROUP_CONCAT(name) as names
FROM prueba p
GROUP BY p.Group
");

echo "<table border='1'><tr><th>Group</th><th>Name</th></tr>";
while($row = $result->fetch_assoc()){
    $names = split(",",$row["names"]);
    echo "<tr><td rowspan='".count($names)."'>".$row["group"]."</td><td>".$names[0]."</td></tr>";
    array_shift($names);
    foreach($names as $name){
        echo "<tr><td> </td><td>".$name."</td></tr>";
    }
}
echo "</table>";</code>

Problème avancé : regroupement par plusieurs champs

Le problème devient plus complexe lorsque nous introduisons plusieurs champs de regroupement, ainsi que des données supplémentaires associées à chaque groupe. Par exemple, considérons la base de données suivante :

ID    meta_key  meta_value   name

1       group     1          John
2       group     1          Andrea
3       group     1          Jack
4       group     2          Mike
5       group     2          Kurt
6       group     3          Alice

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