Heim >Datenbank >MySQL-Tutorial >Wie erstelle ich dynamisch Kreuztabellen in MySQL mit unterschiedlichen Spaltennamen?
MySQL Dynamic Cross Tabulation
Problem:
Stellen Sie sich eine Tabelle vor, die Attribute wie „ „Weg“, „Stopp“ und „Zeit“. Das Ziel besteht darin, diese Daten in ein Kreuztabellenformat umzuwandeln, in dem Spalten unterschiedliche „Weg“-Werte und Zeilen „Stopp“-Werte darstellen. Jede Zelle enthält die maximale „Zeit“, die für die entsprechende Kombination aus „Weg“ und „Stopp“ aufgezeichnet wurde.
Dynamische Lösung:
Die Einschränkungen von MySQL erfordern, dass Spaltennamen und -nummern angegeben werden muss während der Abfrageausführung behoben werden. Um diese Herausforderung zu meistern, ziehen Sie zwei anwendungsbasierte Ansätze in Betracht:
Option 1: Eindeutige Werte abfragen
Option 2: Zeilenweise Verarbeitung
Implementierung:
Für Option 1:
$way_array = []; 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`"; $pivotstmt = $pdo->query($pivotsql);
Für Option 2:
$stoparray = []; foreach ($pdo->query("SELECT * FROM `MyTable`") as $row) { $stopkey = $row["stop"]; if (!array_key_exists($stopkey, $stoparray)) { $stoparray[$stopkey] = ["stop"=>$stopkey]; } $waykey = "way_" . $row["way"]; $stoparray[$stopkey][$waykey] = $row["time"]; }
Das obige ist der detaillierte Inhalt vonWie erstelle ich dynamisch Kreuztabellen in MySQL mit unterschiedlichen Spaltennamen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!