Lorsque vous traitez une table avec un nombre inconnu de valeurs dans une colonne particulière (comme "way" dans l'exemple fourni), créant une tabulation croisée dans MySQL peut sembler un défi. L'approche conventionnelle vous oblige à spécifier les noms de colonnes au moment de l'interrogation, ce qui peut ne pas être réalisable dans des situations dynamiques.
Pour relever ce défi, deux solutions programmatiques peuvent être utilisées :
Cette approche consiste à récupérer les valeurs distinctes de la colonne avec des comptes incertains. À l'aide de cette liste de valeurs, vous pouvez créer une requête pivot dynamique et ajouter les colonnes nécessaires à votre instruction SELECT.
<code class="sql">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>
Cette méthode alternative consiste à interroger les données ligne par ligne telles qu'elles sont structurées dans votre base de données. Vous collecterez les données dans un tableau, puis les pivoterez en colonnes avant de les afficher.
<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>
Les deux approches nécessitent un codage pour s'adapter à des situations dynamiques où le nombre de colonnes est inconnu. Le choix de l'approche dépendra des exigences spécifiques de manipulation des données et des considérations d'efficacité.
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!