Erik: Foren-Programmierung: Organisation der Nachrichten

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

  1. 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

    1. 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)

      1. 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

        1. 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!

          1. 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

            1. 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.

              1. 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