phpbar.de logo

Mailinglisten-Archive

[php] =?iso-8859-1?Q?EIN_verkn=FCpftes_Query_=FCber_zwei_Tabellen?=

[php] =?iso-8859-1?Q?EIN_verkn=FCpftes_Query_=FCber_zwei_Tabellen?=

Alexander Mieland dma147_(at)_arcormail.de
Tue, 13 Feb 2001 13:16:03 +0100


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