mysql: Abfrage zusammenfassen
David
- datenbank
Hallo,
wer kann folgende Abfragen zu einer Abfrage zusammenfassen?
$result=mysql_query("select * from teilebestellung where spielID=$spielID");
if ($result==FALSE) {
die(mysql_error($db));
}
while ($row=mysql_fetch_row($result)) {
$result_u=mysql_query("select * from teile where bestellID=$row[0]");
if ($result_u==FALSE) {
die(mysql_error($db));
}
while ($row_u=mysql_fetch_row($result_u)) {
echo ("Datum: $row[5] Teil: $row_u[0]-$row_u[1]<br>");
}// end while2
}// end while
Grüße, David
Hello,
wer kann folgende Abfragen zu einer Abfrage zusammenfassen?
na hoffentlich DU, nachdem du die Join-Artikel im SELFHTML-Datenbanken-Bereich gelesen hast.
Die Bestandteile hast du jetzt schon: Abfragen und Kriterien, nach denen die Abfragen verbunden sind.
MfG
Rouven
Hallo Rouven,
dank Dir für den Link. Hab mich mal eingelesen, verstehs aber nicht so recht. Dachte zuerst, ganz einfach, aber die Tücke liegt im Detail. Dann fehltenm mysql Aliasse, danach wars irgendwas anderes.
Und zum guten Schluß wars irgendwie nur noch Rumraterei.
Hast Du noch nen Tip für mich?
Grüße, David
Hi Rouven,
ich hatte nur einen kleinen Denkfehler drin. Jatzt hab ichs begriffen. Gar nicht mal so schwer!
select
b.xxx,
b.yyy,
t.ddd,
t.rrr,
t.uuu
FROM tab1 b, tab2 t
WHERE b.bestellID = t.bestellID AND b.SpielID=$SpielID
Richtig so? Oder gehts noch leichter?
Grüße, David
Hello,
Richtig so? Oder gehts noch leichter?
Es geht sauberer. Implizite Joins neigen dazu undurchsichtig zu werden.
SELECT
b.xxx,
b.yyy,
t.ddd,
t.rrr,
t.uuu
FROM
tab1 b
INNER JOIN
tab2 t
ON b.bestellID = t.bestellID
WHERE b.SpielID = $SpielID
MfG
Rouven
Hallo,
ich hatte nur einen kleinen Denkfehler drin. Jatzt hab ichs begriffen. Gar nicht mal so schwer!
schön.
select
b.xxx,
b.yyy,
t.ddd,
t.rrr,
t.uuu
FROM tab1 b, tab2 t
WHERE b.bestellID = t.bestellID AND b.SpielID=$SpielIDRichtig so? Oder gehts noch leichter?
Schöner. Mit der expliziten JOIN-Syntax, siehe gern auch die Titel unser beiden Artikel :-)
SELECT -- Gib mir
b.xxx, -- die gewünschten
b.yyy, -- Spalten
t.ddd,
t.rrr,
t.uuu,
FROM -- aus Tabelle
tab1 b -- tab1, die mit b angesprochen wird und
INNER JOIN -- mit der Tabelle
tab2 t -- tab2, die hier mit t angesprochen wird
ON -- über die Bedingung
b.bestellID = t.bestellID -- gleicher Werte in den Spalten bestellID
-- verknüpft ist,
WHERE -- wobei nur die Datensätze berücksichtigt
b.SpielID = <Vorgabe> -- werden, die in der Spalte SpielID den
-- Vorgabewert enthalten
Ich bevorzuge diese Schreibweise, weil sie klar macht, über welche Bedingung die Tabellen miteinander verknüpft sind (JOIN-Bedingung) und welche Einschränkungen für die Ergebnismenge gelten (WHERE-Klausel).
Spätestens bei der Verknüpfung dreier Tabellen kannst Du mit dem Komma-Operator bei der Aufzählung der Tabellen mit impliziten Joins (Deine Version) Schiffbruch erleiden, weil die Reihenfolge der Aufzählung seit MySQL 5.0.12 eine wichtige Rolle spielt - und nicht beliebig ist.
Beim OUTER JOIN gibt es meiner Meinung nach heutzutage sowieso keine Alternative zur expliziten JOIN-Syntax, so dass es kein erhöhter Lernaufwand ist, sich gleich mit dieser vertraut zu machen.
Freundliche Grüße
Vinzenz