"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment créer dynamiquement des tables à tabulations croisées dans MySQL?

Comment créer dynamiquement des tables à tabulations croisées dans MySQL?

Publié le 2025-03-22
Parcourir:388

How to Dynamically Create Cross-Tabulated Tables in MySQL?

MySql Dynamic Cross Tab

Problème:

Vous avez un tableau contenant des données avec plusieurs dimensions, et vous voulez créer un tableau croisé (Tableau Pivot) sans savoir le nombre de dimensions Upfront.

Solution:

Le nombre de colonnes pour une requête de pivot doit être défini au moment de la préparation de la requête. Pour réaliser une touche croisée dynamique, vous avez deux options qui impliquent d'écrire du code d'application:

Option 1: requêtes des valeurs distinctes et construire dynamique sql

  1. requêtes pour des valeurs distinctes dans la dimension que vous souhaitez pivot (par exemple, "Way"). Temps maximum pour chaque valeur de dimension distincte.
  2. Rejoignez les fragments SQL en une seule chaîne de requête en utilisant des virgules. ($ PDO-> Query ("Sélectionner un` Way` distinct de `myTable`") comme $ row) { $ way = (int) $ row ["way"]; $ way_array [] = "max (if (` way` = $ way, `time`)) as way_ $ way"; } $ pivotsql = "SELECT STOP". join (",", $ way_array). "From` MyTable` Group by `stop`";
  3. Option 2: Row de requête et post-processus par ligne

requêtes les données telles quelles. Key. remplit le tableau avec des sous-réseaux contenant la deuxième valeur de dimension (par exemple, "Way") comme les clés et les valeurs de temps comme valeurs.

foreach ($pdo->query("SELECT DISTINCT `way` FROM `MyTable`") as $row) {
  $way = (int) $row["way"];
  $way_array[] = "MAX(IF(`way`=$way, `time`)) AS way_$way";
}
$pivotsql = "SELECT stop, " . join(", ", $way_array) .
   "FROM `MyTable` GROUP BY `stop`";

Exemple:

  1. $ stopArray = array (); foreach ($ pDo-> Query ("SELECT * FROM` myTable` ") As $ row) { $ stopkey = $ row ["stop"]; if (! array_key_exists ($ stopkey, $ stopArray)) { $ stopArray [$ stopkey] = array ("stop" = & gt; $ stopkey); } $ waykey = "way_". $ row ["way"]; $ stopArray [$ stopkey] [$ waykey] = $ row ["time"]; }
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3