verschachtelte Abfrage in MySQL
am 29.09.2005 13:11:54 von fox_bw
Hallo zusammen,
ich habe ein Problem. Vielleicht ist es einfach zu lösen, aber ich bin
noch ein Anfänger in MySQL. Kann ich eine verschachtelte Abfrage in
MySQL machen und wenn ja wie?
Zum Inhalt. Ich habe zwei Tabellen. In der einen Tabelle steht die
Beziehung zwischen Gerät und Fahrzeug (G_ID und F_ID).
In der anderen Tabelle stehen die Geräte. Es wird nun in einem
Formular das Fahrzeug und der Geräteraum ausgewählt und dann sollen
alle Geräte angezeigt werden, welche in dem besagten Fahrzeug und
Geräteraum vorhanden sind. Ich habe hierzu folgenden Quellcode
geschrieben, der allerdings nur das Gerät mit der ID=3D1 ausgibt, da
sich dieses Gerät in dem Gerätraum befindet. Es sind auch noch
weitere in der Datenbank eingetragen, diese werden aber nicht
angezeigt.
/*SQL String*/
mysql_select_db($db,$Verbindung)
or die ('Kann Geraet-Fahrzeug nicht benutzen: '.mysql_errno().',
'mysql_error());
$result =3D mysql_query("SELECT ID,G_ID,F_ID
FROM Geraet_Fahrz
WHERE ((F_ID=3D$Fahrzeug_ID) and (Gr=3D'$Gr'))
")
or die ("Fehler: ".mysql_errno().", ".mysql_error());
/*Tabelle ausgeben*/
while ($line =3D mysql_fetch_array($result, MYSQL_BOTH)) {
$Geraet_ID=3D$line['G_ID'];
mysql_select_db($db,$Verbindung)
or die ('Kann Geraet nicht benutzen: '.mysql_errno().',
'mysql_error());
$result =3D mysql_query("SELECT ID,Ueberschrift
FROM Geraet
WHERE (ID=3D$Geraet_ID)
")
or die ("Fehler: ".mysql_errno().", ".mysql_error());
while ($line =3D mysql_fetch_array($result, MYSQL_BOTH)) {
echo "\t
\n";
echo "\t\n";
echo $Geraet_ID." ";
echo $line['Ueberschrift'];
echo "\t | \n";
echo "\t
\n";}}
echo "\t\n";
/*Freigeben des Resultsets*/
mysql_free_result($result);
/*Schliessen der Verbindung*/
mysql_close($Verbindung);
Vielen Dank für eure Hilfe!!!!
Gruss
Frank Kümmerle
Re: verschachtelte Abfrage in MySQL
am 29.09.2005 14:30:27 von Alexander Fleischer
Hallo !
fox_bw schrieb:
> Hallo zusammen,
>
> ich habe ein Problem. Vielleicht ist es einfach zu lösen, aber ich bin
> noch ein Anfänger in MySQL. Kann ich eine verschachtelte Abfrage in
> MySQL machen und wenn ja wie?
>
> Zum Inhalt. Ich habe zwei Tabellen. In der einen Tabelle steht die
> Beziehung zwischen Gerät und Fahrzeug (G_ID und F_ID).
> In der anderen Tabelle stehen die Geräte. Es wird nun in einem
> Formular das Fahrzeug und der Geräteraum ausgewählt und dann sollen
> alle Geräte angezeigt werden, welche in dem besagten Fahrzeug und
> Geräteraum vorhanden sind. Ich habe hierzu folgenden Quellcode
und ? Oder alle Geräte, die in dem Fahrzeug ODER Geräteraum vorhanden sind ?
> /*SQL String*/
> mysql_select_db($db,$Verbindung)
> or die ('Kann Geraet-Fahrzeug nicht benutzen: '.mysql_errno().',
> '.mysql_error());
> $result = mysql_query("SELECT ID,G_ID,F_ID
> FROM Geraet_Fahrz
> WHERE ((F_ID=$Fahrzeug_ID) and (Gr='$Gr'))
> ")
> or die ("Fehler: ".mysql_errno().", ".mysql_error());
>
> /*Tabelle ausgeben*/
> while ($line = mysql_fetch_array($result, MYSQL_BOTH)) {
> $Geraet_ID=$line['G_ID'];
>
> mysql_select_db($db,$Verbindung)
> or die ('Kann Geraet nicht benutzen: '.mysql_errno().',
einmal mysql_select_db reicht
> '.mysql_error());
> $result = mysql_query("SELECT ID,Ueberschrift
das alte $result brauchst du noch, also $result2 in der inneren Schleife
verwenden, um das nicht zu überschreiben
> FROM Geraet
> WHERE (ID=$Geraet_ID)
> ")
> or die ("Fehler: ".mysql_errno().", ".mysql_error());
>
> while ($line = mysql_fetch_array($result, MYSQL_BOTH)) {
> echo "\t
\n";
> echo "\t\n";
> echo $Geraet_ID." ";
und da sollte $line['ID'] hin
-------
Das ist aber so insgesamt sehr ungünstig, verschachtelte DB Abfragen
macht man nur, wenn es gar nicht anders geht, und in deinem Fall tut es
ein einfaches JOIN beim ersten Query, um alles auf einmal abzufragen:
SELECT Geraet.id, Geraet.Ueberschrift FROM Geraet_Fahrz LEFT JOIN Geraet
ON Gereat_Fahrz.G_ID=Geraet.ID WHERE Geraet_Fahrz.F_ID==$Fahrzeug_ID
AND Geraet_Fahrz.Gr='$Gr'
Alexander
Re: verschachtelte Abfrage in MySQLam 29.09.2005 14:56:42 von fox_bw
Hallo Alexander,
das mit dem JOIN funktioniert soweit. Jetzt möchte ich aber die
Ausgabe noch sortieren lassen und zwar nach Geraet.Ueberschrift. Gebe
ich diese Zeile als ORDER BY Geraet.Ueberschrift an, dann erscheint
nichts mehr. Wo liegt denn hier der Fehler.
Gruss
Frank Kümmerle
Re: verschachtelte Abfrage in MySQLam 30.09.2005 09:57:57 von Alexander Fleischer
Hallo,
SELECT Geraet.id, Geraet.Ueberschrift FROM Geraet_Fahrz LEFT JOIN Geraet
ON Gereat_Fahrz.G_ID=Geraet.ID WHERE Geraet_Fahrz.F_ID==$Fahrzeug_ID
AND Geraet_Fahrz.Gr='$Gr' ORDER BY Geraet.Ueberschrift
müsste eigentlich gehen, das "order by" muss ans Ende (danach darf
ggfs. noch LIMIT kommen, falls du die Anzahl begrenzen willst).
Ansonsten poste nochmal nen Stück Code, so ist das eher ungünstig...
Alexander
fox_bw schrieb:
> Hallo Alexander,
>
> das mit dem JOIN funktioniert soweit. Jetzt möchte ich aber die
> Ausgabe noch sortieren lassen und zwar nach Geraet.Ueberschrift. Gebe
> ich diese Zeile als ORDER BY Geraet.Ueberschrift an, dann erscheint
> nichts mehr. Wo liegt denn hier der Fehler.
>
> Gruss
>
> Frank Kümmerle
>
|