01. februar 2005 - 17:56Der er
8 kommentarer og 1 løsning
query med flere joins
Jeg har lavet en dabat, men der skal være mulighed for at smide en attribut på hver tråd: locked, sticky
min query: SELECT debate.id, IFNULL(MAX(debate2.time), debate.time) AS last_time FROM $DB.debate debate LEFT JOIN $DB.debate debate2 ON debate.id=debate2.thread_id && debate2.reply_id!=0 WHERE debate.topic='$_GET[tab]' && debate.reply_id=0 GROUP BY debate.thread_id ORDER BY last_time DESC
min struktur: CREATE TABLE `debate` ( `id` mediumint(7) NOT NULL auto_increment, `topic` tinyint(1) NOT NULL default '0', `thread_id` mediumint(7) NOT NULL default '0', `reply_id` mediumint(7) NOT NULL default '0', `user_id` smallint(5) unsigned NOT NULL default '0', `time` int(10) NOT NULL default '0', `subject` varchar(40) NOT NULL default '', `msg` text NOT NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=18 ;
Jeg ved så ikke hvilken måde at "integrere" disse attributer?
Hvis jeg f.eks. laver en sticky attrib på en tråd skal der smides et timestamp med som angiver hvornår den igen skal ophøre med at være sticky :) Jeg ved ikke om jeg skal lave en seperat table til dette og så lave join eller bare lave 2 nye rækker i den eksisterende debate table?
eks. thread_id | lock | sticky
Jeg ved heller ikke lige hvordan jeg skal lave min query, så alle sticky tråde bliver trukket ud først?
oki... men jeg ved ikke helt hvordan jeg skal lave min query? jeg skal have lavet en slags if-statement mere i select
$sql = "SELECT debate.id, IFNULL(MAX(debate2.time), debate.time) AS last_time, debate_attrib.stick FROM ($DB.debate debate LEFT JOIN $DB.debate debate2 ON debate.id=debate2.thread_id && debate2.reply_id!=0) LEFT JOIN $DB.debate_attrib debate_attrib ON debate.id=debate_attrib.thread_id WHERE debate.topic='$_GET[tab]' && debate.reply_id=0 GROUP BY debate.thread_id ORDER BY debate_attrib.stick DESC, last_time DESC";
det skal være sådan at det kun hvis debate_attrib.stick>0 at den skal sortere efter den :)
$sql = "SELECT debate.id, IFNULL(MAX(debate2.time), debate.time) AS last_time, IFNULL(debate_attrib.stick, 0) AS stick FROM ($DB.debate debate LEFT JOIN $DB.debate debate2 ON debate.id=debate2.thread_id && debate2.reply_id!=0) LEFT JOIN $DB.debate_attrib debate_attrib ON debate.id=debate_attrib.thread_id WHERE debate.topic='$_GET[tab]' && debate.reply_id=0 GROUP BY debate.thread_id ORDER BY stick DESC, last_time DESC";
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.