Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] 1.Tabelle anhand von Werten aus 2.Tabelle ordnen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] 1.Tabelle anhand von Werten aus 2.Tabelle ordnen

    Hi,

    Ich entwickle gerade ein kleines Forum.
    Hierfür habe ich 2 Tabellen in meiner MySQL-Datenbank.
    In der ersten stehen die Themen, in der zweiten die Beiträge.

    So aufgebaut:
    Tabelle1 (Themen):
    Code:
    id | thema
    Tabelle2 (Beiträge):
    Code:
    id | themaid | beitrag | datum

    Wie man sieht, bekommen die Beiträge jeweils im Feld "themaid" die zugehörigkeit zu den Themen zugewiesen.

    Nun möchte ich, dass meine Themen so ausgegeben werden, dass immer das Thema mit dem neuesten Beitrag zuerst erscheint - genau wie in diesem Forum hier zum Beispiel.

    Meine Theorie sieht so aus (bitte korrigiert mich wenn es anders geht):
    Ich muss, während ich die Themen abrufe, bei den Beiträgen per "ORDER BY datum DESC" jeweils von denen, die die selbe "themaid" haben, das aktuellste Datum herausfischen ('GROUP BY'?) und die Themen dann danach sortieren.

    Jedoch bekomme ich das nicht wirklich hin.
    Bis jetzt habe ich folgendes zusammengewürfelt (wörtlich!):

    PHP-Code:
    $sql "
    SELECT t.id, t.thema 
    FROM Themen AS t, Beitraege AS b 
    WHERE  b.themaid = u.id 
    GROUP BY b.themaid 
    ORDER BY b.erstellt DESC
    "

    aber "überraschender" Weise läuft das nicht
    naja, vielleicht denke ich auch viel zu kompliziert.
    Ich hoffe ihr könnt mir helfen, oder wenigstens in die richtige Richtung lenken.

    Danke schonmal
    Gruß

  • #2
    Zitat von MCee Donald Beitrag anzeigen

    So aufgebaut:
    Tabelle1 (Themen):
    Code:
    id | name
    Tabelle2 (Beiträge):
    Code:
    id | themaid | beitrag | datum

    PHP-Code:
    $sql "
    SELECT u.id, u.thema 
    FROM Themen AS t, Beitraege AS b 
    WHERE  b.themaid = u.id 
    GROUP BY b.themaid 
    ORDER BY b.erstellt DESC
    "

    Also irgendwas stimmt nicht mit den Tabellen bzw. mit Deiner Abfrage.
    In der Abfrage erscheint als Alias "u." der nirgend definiert ist und die Spalte "thema". In Deinen Tabellen oben gibt es keine Spalte "thema".

    Bitte etwas genauer beschreiben...

    Grüße
    Thomas

    Kommentar


    • #3
      oh sorry. Habe es korrigiert.
      Ich hab das ein wenig für euch komprimiert - und dabei sind wohl die Fehler entstanden.
      Also im originalen ist das jedenfalls alles richtig

      Also ich möchte einfach nur prüfen, für welches Thema (aus Tabelle 1) der neueste Beitrag (aus Tabelle 2) abgegeben wurde und die Themen dann so geordnet ausgeben.

      Grüße

      Kommentar


      • #4
        probiert mal folgende Lösung...

        Code:
        CREATE TABLE themen (
         id INT NOT NULL,
         thema VARCHAR(100)
        );
        
        CREATE TABLE beitraege (
         id INT NOT NULL,
         themaid INT NOT NULL,
         beitrag VARCHAR(100) NOT NULL,
         datum DATE NOT NULL
        );
        
        INSERT INTO themen VALUES
        ( 1, 'Thema-1'),
        ( 2, 'Thema-2');
        
        INSERT INTO beitraege VALUES
        ( 1, 1, 'Beitrag-1', '2010-06-01'),
        ( 2, 1, 'Beitrag-2', '2010-06-02'),
        ( 3, 2, 'Beitrag-3', '2010-06-02'),
        ( 4, 2, 'Beitrag-4', '2010-06-03');
        
        
        SELECT t.id, t.thema, b.beitrag, b.datum
          FROM themen t
          JOIN ( SELECT themaid, MAX(datum) AS datum
                   FROM beitraege
                  GROUP BY themaid ) nt
            ON t.id = nt.themaid
          JOIN beitraege b
            ON b.themaid = nt.themaid
           AND b.datum = nt.datum
        ORDER BY t.id;
        
        
        +----+---------+-----------+------------+
        | id | thema   | beitrag   | datum      |
        +----+---------+-----------+------------+
        |  1 | Thema-1 | Beitrag-2 | 2010-06-02 |
        |  2 | Thema-2 | Beitrag-4 | 2010-06-03 |
        +----+---------+-----------+------------+
        2 rows in set (0.02 sec)
        
        mysql>
        Grüße
        Thomas

        Kommentar


        • #5
          jihaaa.... vielen Dank.
          Einwandfrei !!!

          allerdings muss es zum Schluss doch statt
          PHP-Code:
          ORDER BY t.id
          so heißen:
          PHP-Code:
          ORDER BY b.datum
          Aber trotzdem, vielen Dank

          Hätte das niemals alleine hinbekommen.

          Viele Grüße

          Kommentar

          Lädt...
          X