Hallo SQL-Könner ...
Ich bin hier kurz vor der Verzweiflung. Es geht um eine Abfrage aus (nur) 3 Tabellen, einer Sortierung und einer Gruppierung. (Ja, ich habe schon gesucht, eine Woche lang in zig Foren und Tutorials, aber leider nichts gefunden.)
Zuerst mal die (vereinfachte) TBL-Struktur:
TBL_USER (Tabelle mit den Usern)
u_id (int)
u_nick (varchar)
TBL_THEMEN (Tabelle mit den Threads)
fo_id (int)
th_id (int)
th_last_user (int)
th_titel (varchar)
TBL_POSTINGS (Tabelle mit den Postings)
th_id (int)
po_id (int)
po_zeit (datetime)
Ich möchte nun eine Übersicht aller Foren haben. Jedes Forum soll nur einmal erscheinen und zwar mit dem Thread, in dem als letztes gepostet wurde. Dazu natürlich der passende (neueste) Verfasser und die passende (neueste) Zeit, sowie die Anzahl der Postings in diesem Thema. Im Prinzip also etwas, das man in fast jedem größeren Forensystem findet. Nur kann ich mir da leider keine Query abschauen, weil die Strukturen der Tabellen vollkommen anders sind und ebenso das Prinzip.
Meine Querys sahen bis jetzt in etwa so aus. (Ich habe natürlich intensiv herumexperimentiert.)
SELECT
t.fo_id, t.th_id, t.th_titel, u.u_nick, max(p.po_zeit) as maxzeit, count(p.po_id) as pozahl
FROM
tbl_user u, tbl_themen t, tbl_postings p
WHERE
t.th_id=p.th_id AND p.u_id=t.th_last_user
GROUP BY
t.fo_id
ORDER BY
maxzeit DESC
Bei dieser Abfrage zählt er leider alle Postings zusammen, nicht die des aktuellsten Threads. Er spuckt auch einen belibiegen Titel heraus, dazu den falschen Nick und die absolut falsche Zeit. Es passt also nichts zusammen.
Wenn ich GROUP BY t.fo_id, t.th_id mache, erhalte ich leider alle Themen (t.th_id) eines jeden Forums (t.fo_id).
Abfrage 2:
SELECT
t.fo_id, t.th_id, t.th_titel, count(p.po_id) as pozahl, u.u_nick, max
(p.po_zeit) as maxzeit
FROM
tbl_postings as p
RIGHT JOIN
tbl_themen as t ON p.th_id=t.th_id
LEFT JOIN
tbl_user as u ON p.u_id=t.th_last_user
GROUP BY
t.fo_id
ORDER BY maxzeit DESC
Hier erhalte ich das absolute Chaos, das ich absolut nicht verstehen kann. Wenn ich hinten dran noch eine WHERE-Abfrage dranhänge, die so aussieht, wie die von der ersten BSP-Query, erhalte ich ebenfalls dasselbe Ergebnis, wie in der ersten Query ...
Ich habe schon mit allen möglichen Kombinationen aus LEFT und RIGHT JOIN experimentiert und auch mit reinem JOIN, aber es ist immer dasselbe.
Ich habe auch eine zusätzliche Tabelle angelegt
TBL_FOREN
fo_id (int)
und diese in verschieden Query-Anordnungen einbezogen, jedoch ebenfalls ohne Erfolg
Es wäre absolut toll, wenn mir jemand helfen könnte. Vielen Dank schon im Vorraus.
Ich bin hier kurz vor der Verzweiflung. Es geht um eine Abfrage aus (nur) 3 Tabellen, einer Sortierung und einer Gruppierung. (Ja, ich habe schon gesucht, eine Woche lang in zig Foren und Tutorials, aber leider nichts gefunden.)
Zuerst mal die (vereinfachte) TBL-Struktur:
TBL_USER (Tabelle mit den Usern)
u_id (int)
u_nick (varchar)
TBL_THEMEN (Tabelle mit den Threads)
fo_id (int)
th_id (int)
th_last_user (int)
th_titel (varchar)
TBL_POSTINGS (Tabelle mit den Postings)
th_id (int)
po_id (int)
po_zeit (datetime)
Ich möchte nun eine Übersicht aller Foren haben. Jedes Forum soll nur einmal erscheinen und zwar mit dem Thread, in dem als letztes gepostet wurde. Dazu natürlich der passende (neueste) Verfasser und die passende (neueste) Zeit, sowie die Anzahl der Postings in diesem Thema. Im Prinzip also etwas, das man in fast jedem größeren Forensystem findet. Nur kann ich mir da leider keine Query abschauen, weil die Strukturen der Tabellen vollkommen anders sind und ebenso das Prinzip.
Meine Querys sahen bis jetzt in etwa so aus. (Ich habe natürlich intensiv herumexperimentiert.)
SELECT
t.fo_id, t.th_id, t.th_titel, u.u_nick, max(p.po_zeit) as maxzeit, count(p.po_id) as pozahl
FROM
tbl_user u, tbl_themen t, tbl_postings p
WHERE
t.th_id=p.th_id AND p.u_id=t.th_last_user
GROUP BY
t.fo_id
ORDER BY
maxzeit DESC
Bei dieser Abfrage zählt er leider alle Postings zusammen, nicht die des aktuellsten Threads. Er spuckt auch einen belibiegen Titel heraus, dazu den falschen Nick und die absolut falsche Zeit. Es passt also nichts zusammen.
Wenn ich GROUP BY t.fo_id, t.th_id mache, erhalte ich leider alle Themen (t.th_id) eines jeden Forums (t.fo_id).
Abfrage 2:
SELECT
t.fo_id, t.th_id, t.th_titel, count(p.po_id) as pozahl, u.u_nick, max
(p.po_zeit) as maxzeit
FROM
tbl_postings as p
RIGHT JOIN
tbl_themen as t ON p.th_id=t.th_id
LEFT JOIN
tbl_user as u ON p.u_id=t.th_last_user
GROUP BY
t.fo_id
ORDER BY maxzeit DESC
Hier erhalte ich das absolute Chaos, das ich absolut nicht verstehen kann. Wenn ich hinten dran noch eine WHERE-Abfrage dranhänge, die so aussieht, wie die von der ersten BSP-Query, erhalte ich ebenfalls dasselbe Ergebnis, wie in der ersten Query ...
Ich habe schon mit allen möglichen Kombinationen aus LEFT und RIGHT JOIN experimentiert und auch mit reinem JOIN, aber es ist immer dasselbe.
Ich habe auch eine zusätzliche Tabelle angelegt
TBL_FOREN
fo_id (int)
und diese in verschieden Query-Anordnungen einbezogen, jedoch ebenfalls ohne Erfolg
Es wäre absolut toll, wenn mir jemand helfen könnte. Vielen Dank schon im Vorraus.
Kommentar