Ausgabe von an mehrere tables gerichtete MySQL-Queries
Anatol
- php
Hallo zusammen,
ich habe ein PHP-Problem, für das ich zwar schon eine Lösung gefunden
habe - die kommt mir aber aufwendiger vor, als es sein müsste.
Ich spreche mit PHP eine MySQL-Datebank an. Das, was die Datenbank
ausgibt stammt aus mehreren Tabellen.
Der Query-String lautet folgendermaßen:
$query = "select * from programm as t1, kuenstler as t2 where t1.datum >= '$Jahr-$Monat-01' and t1.datum <= '$Jahr-$Monat-31' and t1.id = t2.id order by datum";
das kann ich mir dann auch problemlos ausgeben lassen mit:
$result = mysql_query($query,$link);
$num = mysql_numrows($result);
for ($i = 0; $i < $num; $i++) {
$row = mysql_fetch_array($result);
echo "$row[datum] <br> $row[uhrzeit]<br> $row[ort] <br> $row[genre]<br> $row[kuenstler]<br><br>";
Das geht aber nur dann gut, wenn ich aus jeder Tabelle für jede id
nur ein Ergebnis habe. Habe ich z.B. folgende Tabellen gibt‚s Probleme:
table programm
+-----+------------+----------+--------------+---------+--
id datum Uhrzeit Ort Genre
+-----+------------+----------+--------------+---------+--
001 2000-05-12 20:30:00 Philharmonie Klassik
002 2000-06-01 20:00:00 Herkulessaal Klassik
usw...
table kuenstler
+-----+-----------+-------------+
id kuenstler instrument
+-----+-----------+-------------+
001 Künstler1 InstrumentX
001 Künstler2 InstrumentY
002 Künstler1 InstrumentZ
usw...
Wenn ich diese Tabellen mit dem obigen Query-String abfrage, bekomme ich
in diesem Fall nicht mehr 1 Ergebnis, sondern 2, ich erhalte als Ausgabe
also:
2000-05-12 und 2000-05-12
20:30:00 20:30:00
Philharmonie Philharmonie
Klassik Klassik
Künstler1 Künstler2
Hätte ich jetzt noch eine 3. Tabelle, die im Query-String mit abgefragt
wird, die auch 2 Ergebnisse pro id liefert, bekäme ich 4 Ergebnisse usw.
Ich habe also schon alle notwendigen Informationen in $result, ich
möchte aber gezielter auf das Ergebnis zugreifen als durch $row.
Ist das irgendwie möglich?
Ich konnte dieses Problem zwar umgehen, indem ich mehrere Queries für
je nur eine Tabelle verwendet habe - aber wozu die Datenbank so oft
anfragen, wenn das Ergebnis durch einen einzigen Query schon in $result
vorhanden ist (und ich bloß nicht weiß, wie ich drankomme)?
Hier meine Alternativlösung:
<?
$link = mysql_pconnect("localhost","","");
mysql_select_db("bellarte",$link);
// Query für table programm
$query_programm = "select * from programm where datum >= '$Jahr-$Monat-01' and datum <= '$Jahr-$Monat-31' order by datum";
$result_programm = mysql_query($query_programm,$link);
$num_programm = mysql_numrows($result_programm);
for ($i_programm = 0; $i_programm < $num_programm; $i_programm++) {
$row_programm = mysql_fetch_array($result_programm);
echo "<b>Datum:</b> $row_programm[datum]<br> <b>Uhrzeit:</b> $row_programm[uhrzeit]<br> <b>Ort:</b> $row_programm[ort]<br> <b>Genre:</b> $row_programm[genre]<br>";
// Query für table text
$query_text = "select * from text where id = '$row_programm[id]'";
$result_text = mysql_query($query_text,$link);
$num_text = mysql_numrows($result_text);
for ($i_text = 0; $i_text < $num_text; $i_text++) {
$row_text = mysql_fetch_array($result_text);
echo "<b>Text:</b> $row_text[text]<br>";
}
echo "<b>Plan:</b> $row_programm[plan]<br>";
}
?>
Ich hoffe, ich habe jetzt nicht alle durch den Umfang dieser Frage
abgeschreckt. 8}
Ich habe zwar eine Lösung, mich würde aber doch interessieren, ob es
eine einfachere Möglichkeit gibt. Ich könnte mir vorstellen, dass
sich mehrere Anfragen an einzelne Tabellen bei größeren Datenbanken
auch merklich auf die Suchzeit auswirken.
Für Vorschläge wäre ich dankbar.
Mit fragenden Grüßen,
Anatol