2 Tabellen sortieren nach Datetime

MikeDe

Mitglied
Ich bekomme noch ne Krise, ist sicherlich einfach als ich grad denke.

Ich habe zwei Tabellen

tab1 news
tab2 comment

Nun möchte ich eine Übersicht auslesen wo ich immer die aktuellste News, bzw News/Kommentar habe. So wie es in einer Forumsübersich üblich ist, also wird zu einer News ein Kommentar geschrieben dann steht die News ganz oben.

Ich habe folgendes (was nicht funktioniert):

PHP:
$sql = "SELECT
                     news.content,
                     news.datetime,
                     comment.content,
                     comment.datetime
               FROM
                     news
               LEFT JOIN
                     comment ON news.id_comment = comment.id
               GROUP BY
                     comment.id_news
               ORDER BY
                     news.datetime DESC, comment.datetime DESC";
 .. usw

Es funktioniert, nur ich habe nicht die aktuellste News bzw News mit Comment oben stehen.

- Legt man das vielleich ganz anders an, noch mit einer constructor Tabelle vielleicht?

Ich bin mit meinem Latain am Ende! Bitte im Hilfe!
 
Zuletzt bearbeitet:
Hi,

ungetestet:

SQL:
SELECT
   news.content,
   if(comment.id IS NULL, news.datetime, max(comment.datetime)) as Datum,
   comment.content,                    
   FROM news
   LEFT JOIN comment ON news.id_comment = comment.id
   GROUP BY comment.id_news
   ORDER BY Datum DESC

LG
 
Zuletzt bearbeitet von einem Moderator:
Das funktioniert, er sortiert alles bis auf News die keinen Kommentar haben, lässt er einfach unter den Tisch fallen.

Vielleicht noch ein Tip? Diese Abfrage (IF...) ist mir ganz neu! Danke. :)
 
Zuletzt bearbeitet:
Hi,

gruppiert werden muss natürlich nach der News-Id (und zwar der aus der news-Tabelle). Warum hast Du eigentlich so viele Id-Felder drin? Was steht z.B. in news.comment_id? Ein News-Eintrag soll doch mehrere Comment-Einträge haben können, oder nicht? :confused:

Eigentlich brauchst Du doch nur folgenden Aufbau:

Tabelle news:
id | text | datetime

Tabelle comments:
id | text | datetime | news_id

In news_id wird die zugehörige id der Newstabelle gespeichert. Dann sähe die Abfrage so aus:

SQL:
SELECT
    news.content,
    IF(comment.id IS NULL, news.datetime, max(comment.datetime)) AS Datum,
    comment.content,                   
    FROM news
    LEFT JOIN comment ON news.id = comment.news_id
    GROUP BY news.id
    ORDER BY Datum DESC

LG
 
Zuletzt bearbeitet von einem Moderator:
Super, es funktioniert. Habe nicht sooo viele ID's drin, war ein fehler :). Danke Danke, hat mir echt Nerven gekostet.
 
Zurück