"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 une tabulation croisée dynamique dans MySQL lorsque les valeurs des colonnes sont inconnues ?

Comment créer une tabulation croisée dynamique dans MySQL lorsque les valeurs des colonnes sont inconnues ?

Publié le 2024-11-08
Parcourir:651

How to Create a Dynamic Cross Tabulation in MySQL When Column Values are Unknown?

Tabulation croisée dynamique dans MySQL

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.

Approches de solution

Pour relever ce défi, deux solutions programmatiques peuvent être utilisées :

1. Interroger des valeurs distinctes et construire une requête pivot

Cette approche consiste à récupérer les valeurs distinctes de la colonne avec des nombres incertains. À l'aide de cette liste de valeurs, vous pouvez construire une requête pivot dynamique et ajouter les colonnes nécessaires à votre instruction SELECT.

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`";

2. Requête ligne par ligne et post-traitement pivot

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.

$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"];
}

Les deux approches nécessitent un codage pour s'adapter aux 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é.

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