Foren-Programmierung: Organisation der Nachrichten
Erik
- perl
Hi,
wie organisiert man am Besten die Nachrichten für ein Forum (mit Baumstruktur) so, dass man das Sortieren der Datenbank überlassen kann?
Henryk hat im Chat vorgeschlagen das mit einer Thread-ID + Message-ID + ID_der_vorherigen_Message (und dann ORDER BY thread_id, ID_der_vorherigen_Message [zumindst hab ich das so verstanden]) zu machen, aber das klappt nicht (z.B. wenn man zwei parallele Äste hat).
Bin für_alle_Vorschläge_dankbar
Erik
wie organisiert man am Besten die Nachrichten für ein Forum (mit Baumstruktur) so, dass man das Sortieren der Datenbank überlassen kann?
Henryk hat im Chat vorgeschlagen das mit einer Thread-ID + Message-ID + ID_der_vorherigen_Message (und dann ORDER BY thread_id, ID_der_vorherigen_Message [zumindst hab ich das so verstanden]) zu machen, aber das klappt nicht (z.B. wenn man zwei parallele Äste hat).
Nun, was Henryk vorgeschlagen hat, sollte funktionieren.
Vielleicht liegts an meinem Verständnis, aber ich sehe das Problem nicht. Kannst du vielleicht das Schema der Tabelle posten und deine SQL-Abfrage? - Vielleicht sogar ein Dump der Daten bzw. Beispiel?
---Philipp
wie organisiert man am Besten die Nachrichten für ein Forum (mit Baumstruktur) so, dass man das Sortieren der Datenbank überlassen kann?
Henryk hat im Chat vorgeschlagen das mit einer Thread-ID + Message-ID + ID_der_vorherigen_Message (und dann ORDER BY thread_id, ID_der_vorherigen_Message [zumindst hab ich das so verstanden]) zu machen, aber das klappt nicht (z.B. wenn man zwei parallele Äste hat).
Nun, was Henryk vorgeschlagen hat, sollte funktionieren.
Vielleicht liegts an meinem Verständnis, aber ich sehe das Problem nicht. Kannst du vielleicht das Schema der Tabelle posten und deine SQL-Abfrage? - Vielleicht sogar ein Dump der Daten bzw. Beispiel?
Ist dein SQL-Query etwa so?:
SQL:
SELECT ... FROM ... WHERE ...
GROUP BY thread_id, ID_der_vorherigen_Message, message_id
ACHTUNG: Beim GROUP BY ist die Angabe von message_id umbedingt erforderlich! - Bei ORDER BY sollte es auch ohne funktionieren.
Was funktioniert denn nicht?
Viele Grüsse
Philipp
PS: Antworten auf philipp.hasenfratz@entryon.ch (vielleicht komme ich hierher nicht zurück)
Hi,
folgendermaßen könnte die Tabelle aussehen (nach Bezugs_id sortiert)
Thread_id Message_id Bezugs_id
1 1 0
1 2 1
1 3 1
1 4 2
1 5 3
aber eigentl. sollte sie ja so aussehen:
1 1 0
1 2 1
1 4 2
1 3 1
1 5 3
Das ist das Problem.
VG
Erik
Hi,
folgendermaßen könnte die Tabelle aussehen (nach Bezugs_id sortiert)
Thread_id Message_id Bezugs_id
1 1 0
1 2 1
1 3 1
1 4 2
1 5 3
aber eigentl. sollte sie ja so aussehen:
1 1 0
1 2 1
1 4 2
1 3 1
1 5 3
In der Tat, das ist ein Problem. Ich habe keine Methode gefunden, wie man das in SQL formuliert. Und ich denke, dass es auch keine Lösung gibt. Die Rheienfolge ist ja "dynamisch", d. h. es gibt keine staatische Daten, die sortiert werden, sondern es ist eine dynamische Sortierung basiert auf Daten des letzten Eintrags ( die Bezugs_id einer Message_id, muss immer die Message_id des zuvorgegangenen Beitrags sein). SQL sieht für dies keine Methode vor.
In mysql und den meisten anderen RDBMS gibt's trotzdem einige "Tricks", wie man solche SQL Probleme umgehen kann: User-Variablen:
SELECT @UserVariable153:=15;
...
SELECT @UserVariable153;
gibt 15 aus. Vielleicht lässt sich so was basteln, aber Achtung: Diese Spezifikation gilt nur für mysql!
Sowas zum Annähern an das Problem:
SELECT @LastMessageID:=message_id AS '1', ... FROM ...
WHERE Bezugs_id=@LastMessageID
ORDER BY thread_id, message_id
Nur ein Tip, wie so ein Trick aussehen könnte, muss wohl noch angepasst werden. Geprüft habe ich's auch nicht.
Hoffe, dass dir das was Hilft.
Gruss
---Philipp
PS: Es wäre tausend-Mal klüger, diese Aufgabe einem Perl/php - Script zu überlassen, da SQL wirklich nicht dafür "prädestiniert" ist!
Hi,
In der Tat, das ist ein Problem. Ich habe keine Methode gefunden, wie man das in SQL formuliert. Und ich denke, dass es auch keine Lösung gibt. Die Rheienfolge ist ja "dynamisch", d. h. es gibt keine staatische Daten, die sortiert werden, sondern es ist eine dynamische Sortierung basiert auf Daten des letzten Eintrags ( die Bezugs_id einer Message_id, muss immer die Message_id des zuvorgegangenen Beitrags sein). SQL sieht für dies keine Methode vor.
Es müsste ja nicht unbedingt mit Message_id, Thread_id und Bezugs_id funktionieren, sondern es könnte auch beliebige andere Werte verwenden. Das wäre egal.
In mysql und den meisten anderen RDBMS gibt's trotzdem einige "Tricks", wie man solche SQL Probleme umgehen kann: User-Variablen:
SELECT @UserVariable153:=15;
...
SELECT @UserVariable153;
gibt 15 aus. Vielleicht lässt sich so was basteln, aber Achtung: Diese Spezifikation gilt nur für mysql!
Sowas zum Annähern an das Problem:
SELECT @LastMessageID:=message_id AS '1', ... FROM ...
WHERE Bezugs_id=@LastMessageID
ORDER BY thread_id, message_id
Nur ein Tip, wie so ein Trick aussehen könnte, muss wohl noch angepasst werden. Geprüft habe ich's auch nicht.
Hoffe, dass dir das was Hilft.
Danke, werde ich mal ausprobieren aber ansonsten: siehe unten.
PS: Es wäre tausend-Mal klüger, diese Aufgabe einem Perl/php - Script zu überlassen, da SQL wirklich nicht dafür "prädestiniert" ist!
Es geht mir auch gar nicht darum das auf "Teufel komm raus" mit SQL zu lösen ich suche einfach dem geschicktesten und (für den Rechner) schnellsten Weg.
MfG
Erik
Es geht mir auch gar nicht darum das auf "Teufel komm raus" mit SQL zu lösen ich suche einfach dem geschicktesten und (für den Rechner) schnellsten Weg.
Hm. Dann kann ich dir nur ans Herz legen, dass du es mit perl/php/asp versuchst. Mit User-Variablen ist das so ne Sache :-)
Gruss
Philipp
PS: Falls du noch Fragen bezüglich der Umsetzung hast, stehe ich PER E-MAIL zur Verfügung.
Hm. Dann kann ich dir nur ans Herz legen, dass du es mit perl/php/asp versuchst. Mit User-Variablen ist das so ne Sache :-)
Okay, werde ich machen.
Gruss
Philipp
PS: Falls du noch Fragen bezüglich der Umsetzung hast, stehe ich PER E-MAIL zur Verfügung.
Danke, werde ich bei Bedarf in Anspruch nehmen :-)
VG
Erik