|
Vorheriges Thema: Nächstes Thema: |
Autor |
Nachricht |
Marina-Sauer
Anmeldungsdatum: 21.01.2007 Beiträge: 2
|
Verfasst am: 21.01.2007 04:26:53 Titel: Frage zu einer JOIN Verschachtelung :-) |
|
|
huhu^^
ich stehe grad vor nem Problem, ich bastel momentan in PHP an einem internen Nachrichtensystem für eine Webseite und bisher klappt es auch ganz gut.
Ich habe für das Nachrichtensystem 5 Tabellen:
* nachricht
ID_Nachricht|ID_Nachrichtentext|ID_Benutzer|ID_Verzeichnis|Gelesen
* nachrichtentext
ID_Nachrichtentext|VON_ID_Benutzer|VON_Benutzer|Titel|Nachricht|Datum
* nachrichten_verzeichnis
ID_Verzeichnis|ID_Nachricht
* nachricht_nachrichtentext
ID_Nachricht|ID_Nachrichtentext
* verzeichnis
ID_Verzeichnis|Name
Das ganze funktioniert nach der dritten Normalform.
Folgende Querys funktionieren einwandfrei um jeweils den Nachrichtentext zur Nachricht, und das Verzeichnis für die Nachricht zuzuordnen.
a.* .. habe ich erstmal nur zum testen drinnen, später werden explizit die spalten angegeben deren datensätze ich benötige.
Code: |
SELECT a.*,b.*
FROM nachricht as a, nachrichtentext as b
LEFT JOIN nachricht_nachrichtentext as c
ON (c.id_nachrichtentext=b.id_nachrichtentext)
WHERE a.id_nachricht=c.id_nachricht
SELECT a.*,b.*
FROM nachricht as a, verzeichnis as b
LEFT JOIN nachrichten_verzeichnis as c
ON (c.id_verzeichnis=b.id_verzeichnis)
WHERE a.id_nachricht=c.id_nachricht |
Nun würde ich aber gerne direkt bei der Abfrage der Nachricht die sich den Nachrichtentext holt, auch zusätzlich noch den Verzeichnisnamen holen der wiederum in der anderen Tabelle vorhanden ist.
Bin leicht übermüdet, und falls ich etwas zu waage beschrieben habe und ihr mir helfen möchtet, bitte einfach nochmal mehr infos anfordern ^^
LG
Marina |
|
Nach oben |
|
 |
admin Site Admin
Anmeldungsdatum: 16.01.2005 Beiträge: 323 Wohnort: Berlin
|
Verfasst am: 21.01.2007 11:36:04 Titel: |
|
|
wo liegt das problem? du kannst doch so oft join'en wie du willst:
SELECT a.*,b.*
FROM nachricht as a, nachrichtentext as b
LEFT JOIN nachricht_nachrichtentext as c
ON (c.id_nachrichtentext=b.id_nachrichtentext)
LEFT JOIN nachrichten_verzeichnis as d
ON (d.id_verzeichnis=b.id_verzeichnis)
WHERE a.id_nachricht=c.id_nachricht
oder besser gesagt, sofern du mehrere tabellen hast verwendest du diese halt alle nacheinander:
SELECT * FROM a
LEFT JOIN b ON a.id = b.id
LEFT JOIN c ON a.id = c.id
LEFT JOIN d ON c.id = d.id
WHERE
b.id IS NOT NULL AND
c.id IS NOT NULL AND
d.id IS NOT NULL AND
a.kriterium = 1312334 |
|
Nach oben |
|
 |
Marina-Sauer
Anmeldungsdatum: 21.01.2007 Beiträge: 2
|
Verfasst am: 21.01.2007 12:27:35 Titel: |
|
|
admin hat folgendes geschrieben: |
wo liegt das problem? du kannst doch so oft join'en wie du willst |
Weil das bei mir irgendwie nicht funktionieren will. Genauso wie dein erstes Beispiel hatte ich es auch versucht gehabt, bekomme aber immer den Fehler:
Unknown column 'a.id_verzeichnis' in 'on clause'
hierbei:
Code: |
SELECT a.*,b.*,c.*,d.*
FROM nachricht as a, nachrichtentext as b
LEFT JOIN nachricht_nachrichtentext as c
ON (c.id_nachrichtentext=b.id_nachrichtentext)
LEFT JOIN nachrichten_verzeichnis as d
ON (d.id_verzeichnis=a.id_verzeichnis)
WHERE a.id_nachricht=c.id_nachricht
|
Was irgendwie nicht sein kann, da a.* ja die Daten von nachricht beinhaltet, und diese ja sehr wohl eine spalte id_verzeichnis hat.
müsste ich nicht eigentlich nach dem ersten Join eine weitere SELECT Abfrage samt Join einbauen ?
Sorry falls ich so blöd frage, aber diese Art da querys nehme ich gerade erst in der Berufsschule durch und kannte sie vorher zwar, habe sie aber irgendwie nie angewandt :-/
LG
Marina[/b] |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|