zwei SQL Abfragen verbingen
jenslm
- datenbank
Macht es Sinn die folgenden zwei Abfragen zu verbinden?
1.Abfrage:
SELECT id, feld1 FROM tab1 WHERE var = 'xx';
2.Abfrage
SELECT feld2, feld3 FROM tab2 WHERE sid = 'id der ersten Abfrage';
Tabellen dazu:
tab1
id | feld1 | var
----------------
1 | wert | xx
----------------
tab2
id | sid | feld2 | feld3
------------------------
1 | 1 | wert | wert
mit sid ist die zweite Tabelle mit der Ersten "verknüpft".
Wenn ja, wie stelle ich dass an?
Lg, Jens
demnach wäre meine Abfrage dann:
SELECT a.id, a.feld1, b.feld2, b.feld3 FROM tab1 a, tab2 b WHERE a.var = 'xx' AND b.sid = a.id;
nur leider erhalte ich dann mit
$result = mysql_query($sql, $database) or die(mysql_error());
do
{
echo $row['a.feld1'];
}
while($row = mysql_fetch_assoc($result));
keine Ausgabe?!
LG
Hallo,
SELECT id, feld1 FROM tab1 WHERE var = 'xx';
2.Abfrage
SELECT feld2, feld3 FROM tab2 WHERE sid = 'id der ersten Abfrage';
Wenn ja, wie stelle ich dass an?
mit einem Join
SELECT
tab2.feld2,
tab2.feld3
FROM
tab2
INNER JOIN
tab1
ON
tab2.sid = tab1.id
WHERE
tab1.var = <wert>
oder einem Subselect.
SELECT
tab2.feld2,
tab2.feld3
FROM
tab2
WHERE
sid IN ( -- Beachte: es könnte mehr als eine ID
-- den gewünschten Wert haben
SELECT
id
FROM
tab1
WHERE
var = <wert>
)
EXPLAIN (bzw. das vergleichbare Werkzeug Deines Datenbankmanagementsystems) kann Dir sagen, was bei Deinen Tabellen effizienter ist.
Freundliche Grüße
Vinzenz
SELECT
tab2.feld2,
tab2.feld3
FROM
tab2
INNER JOIN
tab1
ON
tab2.sid = tab1.id
WHERE
tab1.var = <wert>
funktioniert dass?! Mittlerweile sieht die Sache nämlich so aus:
tab1
id1 | feld1 | feld2
------------------
1 | test | test2
------------------
2 | info | info2
tab2
id2 | tab1-id | feld3
---------------------
1 | 1 | hallo
---------------------
2 | 2 | ciao
---------------------
3 | 2 | was
tab3
id3 | tab2-id | feld4 | feld5
-----------------------------
1 | 2 | aktiv | rot
-----------------------------
2 | 1 | passiv| blau
Jetzt möchte ich für die spätere Verwendung Folgendes, nur funktioniert dass so nicht...ich möchte damit nur versuchen zu verdeutlichen worum es mir geht!
SELECT feld3, feld4, feld5 FROM tab1, tab2, tab3 WHERE feld1 = 'wert' AND feld2 = 'wert' AND tab1-id = id1 AND tab2-id = id2
versucht habe ich das Ganze dann so:
SELECT b.feld3, c.feld4, c.feld5 FROM tab1 a, tab2 b, tab3 c WHERE a.feld1 = 'wert' AND a.feld2 = 'wert' AND b.tab1-id = a.id1 AND c.tab2-id = b.id2;
müsste so doch eigentlich funktionieren oder brauche ich zwingend den INNER JOIN?
Und wie soll ich dass dann machen? Ich brauch ja die Werte aus zwei Tabellen!?
So funktioniert es auch nicht:
SELECT b.feld3, c.feld4, c.feld5 FROM tab2 b, tab3 c INNER JOIN tab1 a ON b.tab1-id = a.id WHERE a.feld1 = 'wert' AND a.feld2 = 'wert' AND c.tab2-id = b.id2;
vor allem weil hier ja eigentlich auch noch ein zweiter INNER JOIN rein müsste oder?!
alle drei Versionen geben mir GAR NICHTS aus!
wie könnte man das lösen?
lg
und auch mit einem INNER JOIN funktioniert es nicht
tab1 (a)
id | feld1 | feld2 | feld3
--------------------------
1 | test | info | blau
--------------------------
tab2 (b)
id | tab1-id | feld4 | feld5
-----------------------------
1 | 1 | hallo | ciao
-----------------------------
SELECT a.feld3, b.feld4, b.feld5 FROM tab2 b INNER JOIN tab1 a ON b.tab1-id = a.id WHERE a.feld1 = 'wert' AND a.feld2 = 'wert';
ebenfalls KEINE Ausgabe!
Ich nehme mal an dass es daran liegt, dass ich Felder aus beiden Tabellen abfragen will (a.feld3, b.feld4, b.feld5) oder habe ich was anderes falsch gemacht / verstanden? Wie könnte ich das lösen?
Lg
mal nebenbei zu erwähnen wäre da noch dass der SQL-Befehl in phpMyAdmin funktioniert und mir die gewünschten Werte präsentiert!
Also muss dass ja an der Ausgabe liegen?!
$result = mysql_query($sql, $database) or die(mysql_error());
do
{
echo $row['a.pfix'];
}
while($row = mysql_fetch_assoc($result));
LG
LÖSUNG
$result = mysql_query($sql, $database) or die(mysql_error());
do
{
echo $row['pfix']; //Tabelle nicht notieren
}
while($row = mysql_fetch_assoc($result));
Eigene Dummheit ein Alias zu verwenden der nur den SQL-Befehlen zur Verfügung steht. Geklärt. Danke an alle.
Lg