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

Printed on: April 18, 2024 at 18:04 o'clock

Member: godlie
Solution godlie Mar 13, 2015 updated at 14:55:04 (UTC)
Goto Top
Hallo,

du musst deine Datenbankabfrage mit einem JOIN verknüpfen.
Gibt genug Tutorials dafür.
Member: estebu
estebu Mar 13, 2015 at 15:05:33 (UTC)
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