Distinct bzw. richtige Abfrage

Hallo,

ich habe ein Problem mit der „DISTINCT“-Abfrage bzw. mit dem, was ich damit eigentlich erreichen will.

Ich möchte eine Tabelle darstellen, die folgenden Inhalt anzeigt:

Titel | Autor | Datum | letzter Beitrag | Datum
---------|---------|---------|-----------------|-------
topic | user | created | user | created
thread | thread | thread | antworten | antworten

Folgende drei Tabellen bilden die Grundlage für meine Abfrage:

foren
id | name | inhalt
---|------|--------

thread
id | fid | topic | user | created
---|-----|-------|------|--------

antworten
id | tid | fid | user | topic | text | created
---|-----|-----|------|-------|------|--------

Meine Abfrage, um die obige Tabelle darzustellen ist die folgende:

select a.id, a.tid, a.fid, a.user, a.created, t.id, t.topic, t.user, t.created
from antworten a, thread t
where a.fid=$fid and a.tid=t.id
order by a.id desc

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…

Hat jemand ne Idee?! Quasi „zeige immer den neuesten Beitrag zuerst an“…

Grüsse
schuelsche

Hallo,

ich habe ein Problem mit der „DISTINCT“-Abfrage bzw. mit dem,
was ich damit eigentlich erreichen will.

Ich möchte eine Tabelle darstellen, die folgenden Inhalt
anzeigt:

Titel Autor Datum letzter Beitrag Datum
topic user created user created
thread thread thread antworten antworten

Folgende drei Tabellen bilden die Grundlage für meine Abfrage:

foren

id name inhalt

thread

id fid topic user created

antworten

id tid fid user topic text created

Meine Abfrage, um die obige Tabelle darzustellen ist die
folgende:

select a.id, a.tid, a.fid, a.user, a.created, t.id, t.topic,
t.user, t.created
from antworten a, thread t
where a.fid=$fid and a.tid=t.id

AND a.created = (
SELECT max(created)
FROM antworten
WHERE fid = a.fid
AND a.tid = a.tid
)

order by a.id desc

Du musst einfach eine Einschränkung auf die letzte Antwort machen.

Gruß

Peter

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…

Hat jemand ne Idee?! Quasi „zeige immer den neuesten Beitrag
zuerst an“…

Grüsse
schuelsche

Hallo,

select a.id, a.tid, a.fid, a.user, a.created, t.id, t.topic,
t.user, t.created
from antworten a, thread t
where a.fid=$fid and a.tid=t.id
AND a.created = (
 SELECT max(created)
 FROM antworten
 WHERE fid = a.fid
 AND a.tid = a.tid
 )
order by a.id desc

Du musst einfach eine Einschränkung auf die letzte Antwort
machen.

Vielen Dank, das würde prinzipiell funktionieren, genauso wie es auch im Prinzip dies tun würde:

$res = mysql\_query ("SELECT a.id, a.tid, a.fid, a.topic, a.user, a.created, t.id, t.fid, t.topic, t.user, t.created FROM antworten a, thread t WHERE a.fid = $fid AND a.tid = t.id GROUP BY t.topic ORDER BY a.id DESC");

Das Problem scheint wohl an meiner while-schleife zu liegen, die den Eintrag immer wiederholt… Vielleicht sollte ich mal im PHP-forum nachfragen :wink:

Danke,
Grüsse
schuelsche