Comment créer dynamiquement des tableaux croisés dans MySQL ?
Oct 29, 2024 am 09:27 AMTableau 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
- Requête pour valeurs distinctes dans la dimension que vous souhaitez faire pivoter (par exemple, "way").
- Créez un tableau de fragments SQL représentant la durée maximale pour chaque valeur de dimension distincte.
- Joignez les fragments SQL dans une seule chaîne de requête à l'aide de virgules.
- 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>
Option 2 : Interroger et post-traiter les données ligne par ligne
- Interroger les données telles quelles.
- Créer un tableau associatif en utilisant la première valeur de dimension (par ex. , "stop") comme clé.
- 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.
- 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>
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Réduisez l'utilisation de la mémoire MySQL dans Docker

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE?

Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin)

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape

Comment sécuriser MySQL contre les vulnérabilités communes (injection SQL, attaques par force brute)?

Comment configurer le cryptage SSL / TLS pour les connexions MySQL?
