Mehrere Tabellen abfragen mit PHP3 und MySQL
Thorsten
- datenbank
Hallo Forum,
ich benutze PHP3 und MySQL v3.22.32 unter WindowsNT 4.0. Jetzt habe ich versucht, eine SQL-Abfrage über mehrere Tabellen auszuführen wie folgt:
SELECT tabelle_1.*, tabelle_2.*, tabelle_3.* FROM tabelle_1, tabelle_2, tabelle_3 WHERE bedingung
wenn ich das Ergebnis jetzt in PHP verarbeite:
$abfrageergebnis = mysql_db_query("datenbank", $SQLKommando);
for($i=0;$i<mysql_num_rows($abfrageergebnis);$i++) {
$daten = mysql_fetch_array($abfrageergebnis);
}
dann stehen im Array '$daten' nur die Felder aus der letzten Tabelle.
Weiß da jemand einen Rat?
Danke schonmal!
Hallo Thorsten,
Ich habe meine SQL-Erfahrungen nicht mit MySQL gemacht und weiß daher nicht wie es reagiert (jede SQL-Engine reagiert ein bischen anders).
Mir scheint die Abfrage zwar syntaktisch richtig aber logisch nicht ganz vollständig.
SELECT tabelle_1.*, tabelle_2.*, tabelle_3.* FROM tabelle_1, tabelle_2, tabelle_3 WHERE bedingung
Aus dem Beispiel wird nicht klar was du mit der Abfrage erreichen willst aber ich nehme einfach mal die Daten in den drei Tabellen stehen in einer Beziehung zu einander.
Diese Beziehungen werden durch den JOIN-Befehl definiert. Das könnte dann so aussehen:
SELECT [Kunde].*, [Bestellung].*
FROM [Kunde] INNER JOIN [Bestellung] ON [Kunde].KundeID = [Bestellung].KundeRel WHERE...;
So wird jedem Datensatz aus Kunde der/die passende/n Datensatz/e aus Bestellung zugeordnet. Mit drei Tabellen ist es etwas aufwändiger geht aber analog.
Ohne JOIN wird jeder Datensatz mit jeden anderen kombiniert (sinnlos aber so reagiert z.B. Access) oder...
nur die Felder aus der letzten Tabelle
...angezeigt (so reagiert scheinbar MySQL).
Ich hoffe es hilft
Stephan
hallo thorsten,
das ist ganz interssant. ich habe das eben mal ausprobiert; wenn felder in den tabellen gleiche
namen haben und das ganze gefetch wird, so wird in einem assoziativen array natürlich der eintrag mit dem
jeweils letzten wert überschrieben.
bsp.: in tabelle 1 und tabelle 2 sind felder mit dem namen "a". der wert von "a" in tabelle 1 ist "0", in
tabelle 2 "1". wenn du das jetzt selectest ("select tabelle1.*, tabelle2.* from tabelle1,tabelle2") und dann
fetchst ( denglish rules ) ala $daten=mysql_fetch_array($abfrageergebnis), so ist $daten["a"]=="1".
was du machen kannst, ist den array über den index anzusprechen:
$daten[0]=="0" und $daten[1]=="1".
hoffe, das hilft dir weiter.
gruss, christian