Chef: Threads nach letzte Antwort Sortieren

Hallo,

habe ein großes problem - Arbeite grad an einem Forum. Ich Speicher alle Threads und Beiträge in 1 MySQL Tabelle "threads". Threads und Beiträge unterscheide ich mit "threadid". Wenn threadid=-1 ist ist es ein Thread.

Nun möchte ich gerne, dass die Threads Sortiert werden nach der Letzten Antwort. Also der Thread mir der neusten Antwort soll oben angezeigt werden. Mit einer Normalen Abfrage komme ich nicht weiter:

SELECT * FROM threads WHERE (forumid='".$forum_id."' AND threadid='-1') ORDER BY datum DESC;

So Sortiert er ja nur nach den neustem Thread, lasse ich threadid weg bei WHERE zeigt er auch die Beiträge mit an, was er natürlich nicht soll.

Wie mache ich das jetzt am besten?

MfG

  1. Mach doch noch eine zweite Abfrage:

    Erst fragst Du die Haupttitel ab und bevor Du den nächsten Haupttitel ausgibst, gibst Du mit einer weiteren Abfrage alle zugehörigen Zitate aus.

    Oder habe ich Dich da jetzt falsch verstanden?

    cu

  2. Tach!

    Also der Thread mir der neusten Antwort soll oben angezeigt werden.
    SELECT * FROM threads WHERE (forumid='".$forum_id."' AND threadid='-1') ORDER BY datum DESC;

    Du könntest eine correlated Subquery verwenden, die du in der ORDER-BY-Klausel notierst. Die Subquery nimmt alle Datensätze, bei denen die threadid mit der ID vom Hauptdatensatz übereinstimmt und ermittelt mit MAX(datum) das jüngste Datum.

    dedlfix.

    1. Du könntest eine correlated Subquery verwenden, die du in der ORDER-BY-Klausel notierst. Die Subquery nimmt alle Datensätze, bei denen die threadid mit der ID vom Hauptdatensatz übereinstimmt und ermittelt mit MAX(datum) das jüngste Datum.

      Danke! Klappt bestens.

    2. Hello Dedlfix,

      Also der Thread mir der neusten Antwort soll oben angezeigt werden.
      SELECT * FROM threads WHERE (forumid='".$forum_id."' AND threadid='-1') ORDER BY datum DESC;

      Du könntest eine correlated Subquery verwenden, die du in der ORDER-BY-Klausel notierst. Die Subquery nimmt alle Datensätze, bei denen die threadid mit der ID vom Hauptdatensatz übereinstimmt und ermittelt mit MAX(datum) das jüngste Datum.

      Könntest Du bitte zur Vollständigkeit die Query auch mal abbilden?

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Tach!

        Du könntest eine correlated Subquery verwenden, die du in der ORDER-BY-Klausel notierst. Die Subquery nimmt alle Datensätze, bei denen die threadid mit der ID vom Hauptdatensatz übereinstimmt und ermittelt mit MAX(datum) das jüngste Datum.
        Könntest Du bitte zur Vollständigkeit die Query auch mal abbilden?

        Kann ich, aber so schwer ist es nicht. Anstatt des ORDER-BY-Werte kommt die Subquery. (Falls das nicht gehen sollte, kommt die Subquery in die SELECT-Klausel und das ORDER BY bezieht sich auf diese Spalte.) Wie eine Correlated Subquery geht, steht im MySQL-Handbuch (Subquery-Kapitel) und ist auch keine Raketentechnik. In der Subquery nimmt man einfach einen Wert aus der Haupt-Query hinzu, im vorliegenden Fall in der WHERE-Klausel (WHERE subquerytable.field = hauptquerytable.field). Und der Rest ist die Anwendung einer Aggregatfunktion (wie bei COUNT(*)). Außerdem ist für den vorliegenden Fall aufgrund des Tabellendesigns als Subquery-Tabelle die Hauptquery-Tabelle nochmal zu nehmen (beide mit unterschiedlichen Aliasen).

        dedlfix.