Maison  >  Article  >  base de données  >  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 ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-28 08:36:29435parcourir

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 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>

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.

<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!

Déclaration:
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