Tableau croisé dynamique MySQL
Dans les scénarios où le nombre de colonnes dans une requête de tableau croisé est inconnu, les solutions de tableau croisé MySQL traditionnelles peut échouer. Cet article explore deux approches pour relever ce défi.
1. Construction de requête dynamique
Cette méthode consiste à récupérer des valeurs distinctes pour la colonne inconnue (par exemple, way), puis à construire dynamiquement une requête avec le nombre approprié de colonnes :
$pdo->query("SELECT DISTINCT `way` FROM `MyTable`"); foreach ($rows 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`";
Cette Cette approche nécessite du code d'application supplémentaire pour construire la requête de manière dynamique, mais elle évite les instructions SQL complexes et est plus flexible pour gérer un nombre variable de colonnes.
2. Pivotement ligne par ligne
Vous pouvez également interroger les données ligne par ligne et effectuer le pivotement dans le code de l'application :
$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"]; }
Cette approche implique davantage de post-traitement dans l'application, mais cela permet une plus grande flexibilité dans la façon dont les données sont pivotées.
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!