Webstatt.org - Community seit 2006 - 2012 (2024?)

Query:Themen nach letzter Aktivität absteigend sortieren

user-228
14.09.2006 09:15

hallo allerseits,
hab mal wieder ein kleines problem...

ich habe eine art forum.
es gibt eine tabelle "thread" in der ich die gestarteten themen (id, title, text) speichere.
zusätzlich gibt es eine tabelle "post" die die beiträge zu diesen themen beinhaltet (id, text, thread)

da es sich insgesamt in dem system nicht nur um das forum sondern auch andere funktionen dreht, gibt es eine tabelle "log"
die dient als eine art log-buch und zeichnet jedes ereignis auf (eingeloggt, beitrag geschrieben / editiert usw)

in der wird nun das datum, der user, die aktion (zB add-thread oder add-post) und die id des betroffenen datensatzes gespeichert.

jetzt möchte ich für die übersicht der themen folgendes haben:
die themen titel der letzten 10 aktiven themen.
als beispiel führe ich mal http://sourceforge.net/forum/forum.php?forum_id=349817 zB an.


SELECT `threadTitle` , `threadId` , `logUser`
FROM `boardThread` , `boardPost` , `log`
WHERE

??

ORDER BY `logDate` DESC
LIMIT 10


so in etwa...nur die where-clause kann ich mir irgendwie nich richtig erdenken...

hat jemand eine idee und kann mir helfen?!

oder bleibt mir nur der umweg über php (2 abfragen, letzten themen und letzte themen basierend auf "post", array_merge, nach datum absteigend sortieren, array_slice, ausgeben)

vielen dank - bin auch für kleine denkanstöße und andere methoden dankbar lächeln
gruß & angenehmen donnerstag noch - der user-305 gibt ja nochmal alles, user-228

Avatar user-317
14.09.2006 10:36

Brauchst du da nicht einfach noch ein JOIN zu der Tabelle mit logDate?

user-228
14.09.2006 11:48

hmm...aber wie - ich kriegs grad gar nicht gebacken - irgendwie läuft das nich so wie ich es haben mag Fettes Grinsen

gruß, user-228.

Avatar user-317
14.09.2006 12:11

Öhm ja, hab ich schonmal gesagt das ich JOINS nicht mag?

user-228
14.09.2006 12:43

ich auch Fettes Grinsen blick noch nich so ganz durch, hab mir mal fix use bb angeguckt im source (http://usebb.cvs.sourceforge.net/usebb/UseBB/forum.php?view=markup) ist folgendes zu finden:

$result = $db->query("SELECT t.id, t.topic_title, t.last_post_id, t.count_replies, t.count_views, t.status_locked, t.status_sticky, p.poster_guest, p2.poster_guest AS last_poster_guest, p2.post_time AS last_post_time, u.id AS poster_id, u.displayed_name AS poster_name, u.level AS poster_level, u2.id AS last_poster_id, u2.displayed_name AS last_poster_name, u2.level AS last_poster_level FROM ".TABLE_PREFIX."topics t, ".TABLE_PREFIX."posts p LEFT JOIN ".TABLE_PREFIX."members u ON p.poster_id = u.id, ".TABLE_PREFIX."posts p2 LEFT JOIN ".TABLE_PREFIX."members u2 ON p2.poster_id = u2.id WHERE t.forum_id = ".$_GET['id']." AND p.id = t.first_post_id AND p2.id = t.last_post_id ORDER BY t.status_sticky DESC, p2.post_time DESC LIMIT ".$limit_start.", ".$limit_end);


bringt mich aber auch nicht so richtig weiter...hat jemand noch nen denkanstoß oder nen code-beispiel?

gruß, user-228.

Avatar user-317
14.09.2006 13:00

Vielleicht hilft das : http://dev.mysql.com/doc/refman/5.1/de/join.html

Avatar user-279
15.09.2006 08:39

das problem hatte ich auch mal.

einfachste lösung: in der thread-tabelle ein feld "lastpost", dann bei jedem neuen kommentar den entsprechenden thread.lastpost updaten..dann kannst du einfach nur die spalte abfragen.

andere variante ist eben ein join. nachzulesen im mysql manual.