estebu
Goto Top

Array aus Datenbank aus mehreren Tabellen als Exceldatei downloaden

Hallo Gemeinde,

ich grüble seit geraumer Zeit an diesem Problem und komme jetzt nicht mehr weiter.
Ich habe ein Script, welches mir mein MySQL-Array als Exceltabelle formatiert und zum downloaden anbietet.
<?
$str=$Array;
  function cleanData(&$str)
  {
    $str = preg_replace("/\t/", "\\t", $str);  
    $str = preg_replace("/\r?\n/", "\\n", $str);  
	if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';  
  }
$filename = "Zusammenfassung_".date('Y-m-d').".xls";  

header("Content-Disposition: attachment; filename=\"$filename\"");  
header("Content-Type: application/vnd.ms-excel");  
$data=$str;
$flag = false;

foreach($data as $row) {
    if(!$flag) {
      
      echo implode("\t", array_keys($row)) . "\r\n";  
      $flag = true;
    }
    array_walk($row, 'cleanData');  
    echo implode("\t", array_values($row)) . "\r\n";  
  }
  exit;
?>
Nun ist es aber so, dass ich in Tabelle "Veranstaltungen_Filme" eine Spalte "V_Format" habe in der aber nur eine Zahl steht, z.B. 21 und in Tabelle "Formate" ist die dazugehörige Bezeichnung dafür hinterlegt - es gibt dort also eine Spalte mit "id" , darin steht dann die 21 und eine Spalte mit "Name" , in der dann die Bezeichnung des Formates z.B. DVD steht.
Jetzt möchte ich, dass bei der Ausgabe des Arrays eben diese "21" mit dem Namen, also "DVD" ersetzt wird - ich weiss nur nicht, wie ich das query dafür schreiben muss.
Ich könnte mir vorstellen, dass es mit JOIN zu tun hat, bin mir da allerdings nicht sicher. Meine Query sieht derzeit folgendermaßen aus:
<?
$Array = "SELECT  Veranstaltungen_Filme.ThemaNr, Veranstaltungen_Filme.Titel, Veranstaltungen_Filme.Regie, Veranstaltungen_Filme.Buch, Veranstaltungen_Filme.Kamera, Veranstaltungen_Filme.Ton, Veranstaltungen_Filme.Schnitt, Veranstaltungen_Filme.Musik, Formate.Name AS Format   
	
FROM Veranstaltungen_Filme, Formate
  
WHERE ThemaNr='".$selectedNr."'   

AND Veranstaltungen_Filme.V_Format = Formate.Format_id 
	
ORDER BY Titel";  
?>
Dabei wird auch die Excel-Tabelle generiert, aber wenn ich sie öffne, fehlen einige Datensätze und zwar genau die, die in der Spalte "V_Format" keinen Eintrag haben.
Wie kann ich das lösen?
Für ein paar hilfreiche Tipps wäre ich sehr dankbar...

Content-Key: 266189

Url: https://administrator.de/contentid/266189

Ausgedruckt am: 28.03.2024 um 15:03 Uhr

Mitglied: godlie
Lösung godlie 13.03.2015 aktualisiert um 15:55:04 Uhr
Goto Top
Hallo,

du musst deine Datenbankabfrage mit einem JOIN verknüpfen.
Gibt genug Tutorials dafür.
Mitglied: estebu
estebu 13.03.2015 um 16:05:33 Uhr
Goto Top
Danke für den Hinweis, das hatte ich mir ja bereits auch so gedacht.
Für diejenigen, die es vielleicht interessiert, hier nun die Lösung dazu:
<? 
$Array = "SELECT  V.ThemaNr, V.Titel, V.Regie, V.Buch, V.Kamera, V.Ton, V.Schnitt, V.Musik, F.Name AS Format , F1.Name AS Fassung   
	 
FROM Veranstaltungen_Filme V
	
LEFT JOIN Formate F ON (V.V_Format = F.Format_id)  

LEFT JOIN Formate F1 ON (V.Film_Fassung = F1.Format_id)

WHERE V.ThemaNr='".$selectedNr."'   

ORDER BY V.Titel";  
?>

Hierbei greife ich sogar zweimal mit einem LEFT JOIN auf ein und die selbe Tabelle ("Formate") zu, da ich daraus neben des Vorführformates auch noch die Sprachfassung brauche. Super-Geschichte mit den JOIN's face-smile