Mal als Beispiel ob ich dich richtig verstehe:
Usertabelle:
Thementabelle:
Code: Alles auswählen
topic_id, poster_id, topic_title, topic_time
1, 1, Karls Thema 1, 1.1.2000
2, 2, Heinz Thema 1, 2.1.2000
Posts Tabelle
Code: Alles auswählen
post_id, poster_id, topic_id, post_time, post_text
1, 1, 1, 1.1.2000, "Erster Beitrag in Karls erstem Thema"
2, 2, 2, 2.1.2000, "Erster Beitrag in Heinz' erstem Thema"
3, 1, 1, 3.1.2000, "Karls erste Antwort in Karls erstem Thema"
4, 2, 1, 4.1.2000, "Heinz' erste Antwort in Karls erstem Thema"
Wenn ich dich jetzt richtig verstehe moechtest du die Usernamen sortiert nach ihrem letzten Post, wobei aber nur die Posts im eigenen Thema zaehlen. D.h. in diesem Fall waehre die Reihenfolge Karl, Heinz, da Karl zuletzt in seinem eigenen Thema geschrieben hat und Heinz sein Thema schon frueher erstellt hatte. Richtig?
Das muss sich auf jeden Fall per SQL Befehl abfragen lassen, spaetestens mit Subselects muss das machbar sein.
Wie wuerde man das machen, wenn man das ganze einzeln macht?
Wie bekomme ich alle Posts in einem eigenen Thema fuer einen bestimmten User?
Ich brauche alle Beitraege eines Users (WHERE user_id =xy) die in irgend einem Thema sind das der User erstellt hat (JOIN topics ON poster_id = user_id)
Also:
Code: Alles auswählen
SELECT p.*
FROM posts p
LEFT JOIN topics t ON t.poster_id = p.poster_id
WHERE t.topic_id IS NOT NULL AND p.poster_id =xy
Alternativ ohne JOIN und mit Abfrage aus zwei Tabellen:
Code: Alles auswählen
SELECT p.user_id
FROM posts p, topics t
WHERE t.poster_id = p.poster_id
AND p.poster_id =xy
Jetzt wollen wir das ganze aber sortiert nach Datum des Posts:
Code: Alles auswählen
SELECT p.user_id
FROM posts p, topics t
WHERE t.poster_id = p.poster_id
AND p.poster_id =xy
ORDER BY post_time DESC
Und statt der User ID brauchen wir den Usernamen, also brauchen wir noch eine dritte Tabelle:
Code: Alles auswählen
SELECT u.username
FROM posts p, topics t, users u
WHERE t.poster_id = p.poster_id
AND p.poster_id = u.user_id
ORDER BY post_time DESC
Einziges verbleibendes Problem: User tauchen in der Abfrage mehrfach auf, fuer jeden Post in jedem eigenen Thema ein mal. An der Stelle bin ich mir nicht 100% sicher wie man das am besten loesen kann. Die obige Abfrage mittels uebergeordnetem Select neu Sortieren duerfte eine Moeglichkeit sein, aber vermutlich nicht die beste:
Code: Alles auswählen
SELECT DISTINCT username FROM (SELECT u.username
FROM posts p, topics t, users u
WHERE t.poster_id = p.poster_id
AND p.poster_id = u.user_id
ORDER BY post_time DESC)
Eventuell funktioniert GROUP BY username oder auch direkt ein SELECT DISTINCT in der urspruenglichen Abfrage (das wuerde ich zuerst probieren).