Ich habe eine MySQL-Datenbank, in der verschiedene Auswertungen gebraucht werden. Die SQL-Statements können dabei konfiguriert werden und völlig verschiedene Spalten und Daten liefern. Ich generiere jeweils XLS-Dateien daraus. Hier ein Codeschnipsel:
$QueryObject = $db->prepare($sql);
$QueryObject->execute();
while ( $zref = $QueryObject->fetchrow_hashref()) {
if ($Counter == 0) {
#Überschriften auslesen
@KeyList = keys % {$zref};
foreach (@KeyList) {
#Spaltennamen in XLS-Datei schreiben
$Worksheet->write($RowNum, $ColNum, $_ , $FormatHeadline);
$ColNum++;
}
$ColNum = 0;
$RowNum++;
}
#Daten
@KeyList = keys % {$zref};
foreach (@KeyList) {
#Spaltenwerte exportieren
$Worksheet->write($RowNum, $ColNum, $$zref{"$_"} ,$FormatContent);
$ColNum++;
}
$Counter++;
$ColNum = 0;
$RowNum++;
}
Dem Script soll es egal sein, welche Spalten über $sql abgefragt werden. Die Spaltennamen brauche ich aber als Überschrift in der XLS-Datei.
Ich verwende fetchrow_hashref, damit ich die Spaltennnamen der Anfrage kriege und diese über keys %{zref} auslesen kann.
Das funzt eigentlich ganz gut, jedoch kommen die Spalten in zufälliger Reihenfolge an, und nicht in der, die im SQL festgelegt wurde. Vermutlich liegt das an der internen Verwaltung des Hashes.
Wie kriege ich die Spaltennamen einer Abfrage in die richtige Reihenfolge?
Bert