Maison > base de données > tutoriel mysql > Comment créer dynamiquement des tableaux croisés dans MySQL ?

Comment créer dynamiquement des tableaux croisés dans MySQL ?

Mary-Kate Olsen
Libérer: 2024-10-29 09:27:30
original
799 Les gens l'ont consulté

How to Dynamically Create Cross-Tabulated Tables in MySQL?

Tableau croisé dynamique MySQL

Problème :

Vous disposez d'une table contenant des données à plusieurs dimensions et vous souhaitez créer un tableau croisé (tableau croisé dynamique) de manière dynamique sans connaître au préalable le nombre de dimensions.

Solution :

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

Option 1 : interroger des valeurs distinctes et construire du SQL dynamique

  1. Requête pour valeurs distinctes dans la dimension que vous souhaitez faire pivoter (par exemple, "way").
  2. Créez un tableau de fragments SQL représentant la durée maximale pour chaque valeur de dimension distincte.
  3. Joignez les fragments SQL dans une seule chaîne de requête à l'aide de virgules.
  4. Exécutez la requête pivot dynamique avec la chaîne SQL construite.

Exemple :

<code class="php">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`";</code>
Copier après la connexion

Option 2 : Interroger et post-traiter les données ligne par ligne

  1. Interroger les données telles quelles.
  2. Créer un tableau associatif en utilisant la première valeur de dimension (par ex. , "stop") comme clé.
  3. Remplissez le tableau avec des sous-tableaux contenant la deuxième valeur de dimension (par exemple, "way") comme clés et des valeurs de temps comme valeurs.
  4. Le tableau résultant sera ressembler aux données d'une requête pivot.

Exemple :

<code class="php">$stoparray = array();
foreach ($pdo->query("SELECT * FROM `MyTable`") as $row) {
  $stopkey = $row["stop"];
  if (!array_key_exists($stopkey, $stoparray)) {
    $stoparray[$stopkey] = array("stop"=>$stopkey);
  }
  $waykey = "way_" . $row["way"];
  $stoparray[$stopkey][$waykey] = $row["time"];
}</code>
Copier après la connexion

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