PHP Abfrage optimieren

G.P.

Legendäres Mitglied
Hallo,

ich habe ein in einer Datenbank 3 Tabellen

Tabelle 1 (tab_id, wert 1, wert 2)
Tabelle 2 (id, tab_id, wert 1, wert 2)
Tabelle 3 (id, tab_id, wert 1, wert 2)

In Tabelle eins sind mehrere Werte gespeichert, welche ich mit einer While schleife ausgeben und als Liste anzeigen moechte.
Zusaetzlich moechte ich aber zu jedem Wert aus Tabelle 1 auch die entsprechenden Werte aus Tabelle 2 und 3 anzeigen, wobei nicht bekannt ist, wie viele Zeilen in diesen beiden Tabellen den Wert aus Tabelle 1 zugeordnet werden.

Wie kann ich die Datenbank (mysql) mit diesen Bedingungen moeglichst effizient auslesen??

MfG
GP
 
mit effizient, meinst du geschwindigkeit oder wenig code?

wenn du geschwindigkeit meinst, weiss ich es ehrlich gesagt nicht ob in diesen fall (oder generell) alles in einer sql join zu packen schneller ist als 3 verschiedene queries auszuführen.

ich persönlich würde das ganze mit einer sql join lösen... das wäre für mich effizient.

falls du nicht weisst was ein sql join ist --> http://www.w3schools.com/sql/sql_join.asp

gruss
Steven
 
Ich meine Geschwindigkeit.

Ich habe das ganze Probeweise mit folgenden Code gmeacht

CODE
SELECT t1.wert1, t2.wert2, t3.wert3
FROM table1 t1
LEFT JOIN table2 t2 ON t1.tab_id = t2.tab_id
LEFT JOIN table3 t3 ON t1.tab_id = t3.tab_id



Das Problem ist dabei allerdings, das es mehr werte in Tabelle 2 und Tabelle 3 gibt, als in Tabelle 1.

In Tabelle 1 ist immer nur ein Wert Gespeichert. In Tabelle 2 koennen durchaus mehrere Verknuepfungen zu Tabelle 1 bestehen.

In diesem Fall werden alle Verknupfungen richtig ausgelsen, aber der Wert aus Tabelle 1 wird auch mehrmals ausgegeben.
Dies kann man im weiteren verlauf zwar wieder mit verschiedenen PHP Abfragen unterbinden, ich wuerde es aber gerne gleich bei der DB Abfrage so haben, das die richtigen Werte entsprechend Oft ausgelesen werden.
Ob das geht weiss ich nicht
wink.gif


MfG
GP
 
Ich würde es programmtechnisch lösen und nicht über eine einzelne SQL-Abfrage, da Du sowieso alle Daten abfragen möchtest und JOINs bei MySQL sich nicht gerade vorhersehbar verhalten in Punkto Geschwindigkeit.
Außerdem müsste so MySQL die Daten pro Satz einmal komplett übergeben, so dass Du wohl Redundanzen bei der Rückgabe der SQL-Abfrage erhalten wirst, die auch alle übertragen werden müssen, zumind. an die Anwendung, schlimmstenfalls auch noch übers Netzwerk an den Server mit der Anwendung.
 
Du kannst über "explain <sql query>", also z.B. "explain select * from tabelle" schon mal abschätzen, wie optimal der Query ist (welche Keys werden verwendet? etc).

Ansonsten probier's doch einfach aus. Lass dir mit diesem Script (läuft auch mit PHP4, obwohl für PHP5 angegeben) die Ausführungszeit ausgeben und schau wo es besser passt.
 
Zurück
Oben