Also,
grundsätzlich möchte ich folgendes realsieren:
Ich möchte eine Tabelle darstellen, die folgenden Inhalt anzeigt:
Titel | Autor | Datum | letzter Beitrag | Datum
---------|---------|-----------|-----------------|-------
thopic | thuser | thcreated | anuser | ancreated
thread | thread | thread | antworten | antworten
Und zwar soll diese Tabelle jeweils den Thread ganz oben anzeigen, auf den die neueste Antwort gegeben wird, also quasi nach Thread gruppiert und nach neuester Antwort sortiert.
Folgende drei Tabellen bilden die Grundlage für meine Abfrage:
foren
foid | foname | foinhalt
-------|--------|--------
int(11)|tinytext|text
thread
thid | thfid | thtopic | thuser | thcreated
-------|-------|---------|------------|----------
int(11)|int(11)|tinytext |varchar(100)|datetime
antworten
anid | antid | anfid | anuser | antopic | antext | ancreated
-------|-------|-------|--------|---------|--------|-----------
int(11)|int(11)|int(11)|tinytext|tinytext |text |datetime
Die jeweilige …id wird automatisch hochgezählt, das jeweilige …created wird durch ein create(now) in der Datenbank erzeugt. Die neuste Antwort/Thread bekommt automatisch auch die höchste ID (man könnte also sowohl nach an/thcreated wie auch nach an/thid abfragen).
Meine Abfrage, um die obige Tabelle darzustellen war die folgende:
select a.anid, a.antid, a.anfid, a.anuser, a.ancreated, t.thid, t.thtopic, t.thuser, t.thcreated
from antworten a, thread t
where a.anfid=$fid and a.antid=t.thid
order by a.anid desc
… wobei $fid durch den Link übergeben wird.
Das ganze soll letztendlich ein Forum werden, wo in dieser Threadübersicht der Thread als erstes angezeigt werden soll, der die letzte Antwort erhalten hat.
Leider wird mir bei obiger Abfrage zwar die Threads nach Antwort sortiert, aber der Threadtitel wird immer wiederholt. Sieht dann etwa so aus:
Titel | Autor | Datum | letzter Beitrag | Datum
-----------|---------|-----------|-----------------|-------
Testtitel | user1 | 01.01.05 | user25 | 02.02.05
Testtitel | user1 | 01.01.05 | user99 | 28.01.05
Neuer Test | user99 | 28.01.05 | user51 | 25.01.05
Testtitel | user1 | 01.01.05 | user51 | 24.01.05
Wie kann ich jetzt die Abfrage über die beiden Tabellen so gestalten, dass die doppelten „Testtitel“ nicht angezeigt werden?! Mit Distinct kann man irgendwie wohl nur ein Argument überprüfen und nicht eins von 9, wie ich es hier tue…
Quasi „zeige immer den neuesten Beitrag zuerst an“… Das dachte ich durch eine virtuelle Tabelle ermöglichen zu können, funktioniert ja aber auch nicht. Das Problem ist einfach, dass ich zwei Tabellen nach zwei Kriterien sortieren will (eines gruppieren und eines sortieren…
select max(anid) ,thtopic from foo group by thtopic ?
… das werde ich mal testen. Allerdings habe ich die Vermutung, dass mir hier dann nur die max(anid) angezeigt wird und nicht der Rest, den ich aus der Tabelle antworten brauche…
Grüsse
schuelsche