Mailinglisten-Archive |
Hallo Ihr! ich habe heute ein wirklich verzwicktes Problem, an dem ich schon seit gestern nachmittag bis heute morgen um 03:00 Uhr gesessen bin. ich habe das Problem, dass ich aus zwei MySQL-Tabellen eines Forums, die letzten 10 Threads rausholen muss, aber sortiert nach der Zeit des ERSTEN Posts eines jeden Threads. Die beiden Tabellen sehen so aus: ###################### CREATE TABLE messages ( id int(10) unsigned DEFAULT '0' NOT NULL auto_increment, time int(11), text text NOT NULL, author varchar(200) NOT NULL, boardid int(10) unsigned DEFAULT '0' NOT NULL, topic varchar(200) NOT NULL, topic_reference int(11) DEFAULT '0' NOT NULL, email varchar(200) NOT NULL, user_reference int(11) DEFAULT '0' NOT NULL, emailnotify tinyint(1) DEFAULT '0' NOT NULL, PRIMARY KEY (id) ); CREATE TABLE topics ( id int(11) DEFAULT '0' NOT NULL auto_increment, msg_reference int(11) DEFAULT '0' NOT NULL, topic varchar(200) NOT NULL, time int(11) DEFAULT '0' NOT NULL, author varchar(200) NOT NULL, replies int(11) DEFAULT '0' NOT NULL, boardid int(11) DEFAULT '0' NOT NULL, user_reference int(11) DEFAULT '0' NOT NULL, closed tinyint(1) DEFAULT '0' NOT NULL, PRIMARY KEY (id) ); ###################### Meine bisherige Funktion, um die Threads auszulesen, sieht momentan so aus: ###################### function GetNewsThreads($anzahl, $boardid) { $anzahl += 0; if ($anzahl < 1) { $anzahl = 10; } $result = mysql_query("SELECT DISTINCT threads.* FROM messages AS posts, topics AS threads WHERE posts.topic_reference = threads.id AND threads.boardid='$boardid' AND threads.closed<>2 ORDER BY posts.time DESC LIMIT 0,$anzahl"); echo mysql_error(); return $result; } $thread_last = GetNewsThreads($nr, $id); while ($thread_t = mysql_fetch_array($thread_last)) { $threadid = $thread_t["threads.id"]; $topic = $thread_t["threads.topic"]; $anz_com = $thread_t["threads.replies"]; $boardparentid = $thread_t["threads.boardid"]; [...] } ####################### Das funktioniert auch alles wunderbar!! ABER, wenn jemand nun einen neuen Post in einen älteren Thread schreibt, dann kommt dieser Thread, wie es in einem Forum ja auch üblich ist, wieder ganz nach oben. Genau das soll aber nicht passieren! Die Threads müssen nach der Zeit Ihres ERSTEN Posts sortiert werden, wobei der erste Post eines Threads der eigentliche Text des Threads ist und sich hier die Zeit natürlich auch nicht ändert. Kann mir dabei jemand helfen??? Das Problem, welches hier entsteht ist, dass ich bei dem Query ####### SELECT DISTINCT threads.* FROM messages AS posts, topics AS threads WHERE posts.topic_reference = threads.id AND threads.boardid='$boardid' AND threads.closed<>2 ORDER BY posts.time DESC LIMIT 0,$anzahl ####### ....in diesem Teil von dem Query... ### WHERE posts.topic_reference = threads.id ### ...Ja auch noch irgendwo eine Abfrage reinbringen muss, bei der das Script die Zeit ALLER Posts in EINEM Thread miteinander vergleicht und den Post mit der "niedrigsten" Zeit, also mit dem niedrigsten Timestamp zum sortieren nimmt. Ich hoffe, ich habe das nun halbwegs verständlich erklärt... Also: Hilfe.... :) Ich weiss absolut nicht mehr weiter... :( -- mfg Alexander Mieland -- aka DMA147.ThW.N dma147_(at)_thewall.de |--> http://www.apboard.de <--| |--> http://www.thewall.de <--| |--> http://www.halflife-editing.de <--|
php::bar PHP Wiki - Listenarchive