|
|
|
|
+ [MYSQL] Komplexes Tabllen joinen... |
inde
the r33l !n[)3
Dabei seit: 14.09.2003
Beiträge: 267
Herkunft: von da wo ihr nie hinwollt...
|
|
+ [MYSQL] Komplexes Tabllen joinen... |
|
Hallo BBler!
Ich versuche gerade drei Tabellen miteinander zu verknüfen, aber es haut irgendwie nicht hin. Am besten ich schildere mal kurz wie ich mir das vorstelle:
Es gibt 3 Tabellen:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
TAB1:
// Enthält Daten aus einem Formular
id
name
email
betr_pre
betr
savetime
msg |
|
code: |
1:
2:
3:
4:
5:
|
TAB2:
// Enthält Präfixe für den Betreff
id
betr
|
|
code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
TAB3:
// KANN eine Antwort auf msg in TAB enthalten, muss aber nicht
id
msg_id
acpuser_id
savetime
resp
|
|
Nun möchte ich folgendes erreichen:
Anfragen aus TAB1 sollen ausgelesen werden, die die folgende Bedinung erfüllen:
Ihre eigene id (TAB1.id) darf nirgends in der TAB3.msg_id vorkommen
Weiterhin sollen anhand der TAB1.betr_pre aus TAB2 das zugehörige TAB2.betr ausgewählt werden
Wie fragt man so etwas ab?
__________________ MfG
the r33l !n[)3 [ http://www.indetonation.de ]
Durch Frauen wird immer alles nur noch schwieriger!
Odysseus (in "Troja")
|
|
19.04.2005 22:12 |
|
|
LX
El Comandante en Jefe
Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx
|
|
RE: + [MYSQL] Komplexes Tabllen joinen... |
|
Versuch's mal mit:
SELECT tab1.name, tab1.email, tab1.msg, tab2.betr FROM tab1, tab2, tab3 WHERE tab1.id<>tab3.msg_id AND tab1.betr_pre=tab2.id
Die Spalte "betr" in tab1 ist BTW überflüssig.
__________________ JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett
|
|
19.04.2005 22:32 |
|
|
inde
the r33l !n[)3
Dabei seit: 14.09.2003
Beiträge: 267
Herkunft: von da wo ihr nie hinwollt...
Themenstarter
|
|
Hm, funktioniert irgendwie net. Kann es daran liegen, dass TAB3 noch keine Zeilen enthält? Dürft ja aber kaum ne Rolle spielen, oder? Die Spalte betr in TAB1 brauch ich, da hier noch ein vom User selbst bestimmter Betrefftext reimkommt.
edit
irgendwie hats funktioniert, als ich in die TAB3 eine Zeile eingefügt habt... bin zwar net 100% zufrieden aber es haut hin. Danke LX!
edit²
Zja, irgendwie funzt es doch net ganz so... TAB1 Zeilen, deren ID in TAB3.msg_id vorkommt werden immernoch ausgegeben. Irgendwas is da falscht. Abgesehen davon werden Datensätze dreimal ausgegeben, obwohl er nur einmal in der tabelle TAB1 is...
Hier mal die komplette Anfrage:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
$sql = "SELECT
tab2.id, tab2.name, tab2.email, tab2.betr_pre,
tab2.betr, tab2.savetime, tab2.ip, tab2.msg, tab3.betr AS betr_pre
FROM
".$TAB."contact_resp AS tab1,
".$TAB."contact_msg AS tab2,
".$TAB."contact_betr AS tab3
WHERE
tab2.id <> tab1.msg_id
AND tab2.betr_pre = tab3.id
ORDER BY
$ordercol $orderdir
"; |
|
Gerade habe ich noch was rausgefunden:
Die anzahl, wieoft EIN UND DIESELBE Zeile aus TAB1 (im Source tab2) ausgegeben wird richtet sich danach wie viele Zeilen die TAB3 (im Source tab1) hat. Für "k" Zeilen in TAB3 wird der Datensatz mit ID X also "k"-mal ausgegeben. Wenn in TAB3.msg_id die ID von TAB1.id "n"-mal existiert ist diese Zahl "k"-"n". Ich hoffe jemand findet den Fehler...
__________________ MfG
the r33l !n[)3 [ http://www.indetonation.de ]
Durch Frauen wird immer alles nur noch schwieriger!
Odysseus (in "Troja")
Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von inde: 20.04.2005 20:18.
|
|
19.04.2005 22:43 |
|
|
inde
the r33l !n[)3
Dabei seit: 14.09.2003
Beiträge: 267
Herkunft: von da wo ihr nie hinwollt...
Themenstarter
|
|
Sorry dass ich den Thread pushe aber hat echt keine ne Idee, das kann doch net unmöglich sein??? Hier gibts doch Leute die das können, oder? Heeeeelp!
__________________ MfG
the r33l !n[)3 [ http://www.indetonation.de ]
Durch Frauen wird immer alles nur noch schwieriger!
Odysseus (in "Troja")
|
|
23.04.2005 13:04 |
|
|
Deef
...
Dabei seit: 24.08.2002
Beiträge: 431
|
|
Zitat: |
Original von inde
irgendwie hats funktioniert, als ich in die TAB3 eine Zeile eingefügt habt... bin zwar net 100% zufrieden aber es haut hin. Danke LX!
|
Liegt daran, dass Du normale JOINS verwendet, deren Bedingung es ist, dass in allen "gejointen" Tabellen Datensaetze vorhanden sind, die die Bedingung erfuellen. Loesung: LEFT JOIN und entsprechende ON-Bedingung.
So in etwa:
code: |
1:
2:
3:
4:
5:
|
SELECT t1.name, t1.email, t1.was_auch_immer from table_1 t1, table_2 t2
LEFT JOIN table_3 t3 ON t1.id<>t3.msg_id
WHERE t1.id = t2.id
|
|
__________________ Was sagen uns Signaturen?! 1.Ich kann Latein 2.Ich bin umheimlich tiefgründig 3.Ich kann googlen 4.Ich lese die Lyrics der Lieder die ich höre 5.Ich schreibe und denke mir Scheisse aus die keiner lesen will...
|
|
18.06.2005 02:27 |
|
|
|
|
|
|