04. december 2004 - 23:46Der er
9 kommentarer og 1 løsning
Problemer med COUNT og GROUP ved tomme resultater
Jeg er ved at trække en liste af tekster ud fra en database, og ved hver af dem, vil jeg angive hvor mange kommentarer der er lavet til hver tekst.
Det fungerer også - så længe der ligger nogle kommentarer. Når der ikke gør, vil jeg gerne bare have et 0 ud i feltet comments, hvordan gøres det?
Eller rettere, kan det gøres i én sætning, så jeg kan få et udtræk der angiver antallet af kommentarer, og stadig få de tekster vist, som ikke er kommenteret?
Eller er jeg nødt til at tage den klodsede løsning og hente antallet af kommentarer for hver tekst, med en ekstra SELECT-query for hver tekst der bliver vist??
Her er min SQL sætning:
$sql = "SELECT wr_item.*, count(wr_comment.item_id) as comments FROM wr_item, wr_comment WHERE wr_item.subject_id ='$subject_id' AND wr_item.category_id='$category_id' AND wr_comment.item_id=wr_item.item_id AND wr_item.active=1 group by comment_id order by created desc";
og mine tabeller:
CREATE TABLE `wr_subject` ( `subject_id` int(11) NOT NULL auto_increment, `subject_title` varchar(100) NOT NULL default '', `subject_url` varchar(100) NOT NULL default '', `subject_desc` text NOT NULL, `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`subject_id`) ) TYPE=MyISAM AUTO_INCREMENT=3 ;
CREATE TABLE `wr_comment` ( `comment_id` int(11) NOT NULL auto_increment, `item_id` int(11) NOT NULL default '0', `user` varchar(50) NOT NULL default '', `created` bigint(20) NOT NULL default '0', `comment` text NOT NULL, `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`comment_id`) ) TYPE=MyISAM AUTO_INCREMENT=3 ;
SELECT wr_item.*, count(wr_comment.item_id) as comments FROM wr_item left join wr_comment ON wr_comment.item_id=wr_item.item_id WHERE wr_item.subject_id ='$subject_id' AND wr_item.category_id='$category_id' AND wr_item.active=1 group by comment_id order by created desc
majkat, jeg har prøvet din kode og den virker altså ikke :-(
det returnerer de samme data, det antal gange som der er comments for det pågældende item, hver gang med tallet 1 angivet som comments.
det kan godt være jeg har udtrykt mig uklart, men følgende er hvad jeg ønsker:
Jeg vil trække data ud af en tabel, og ved hvert ID i denne tabel, se hvor mange gange dette ID findes i et felt i en anden tabel.
altså, trække en liste af items ud, og angive antallet af kommentarer for disse...
ligesom på forsiden af newz.dk :-)
her er de 2 andre tabeller jeg bruger i mit query:
CREATE TABLE wr_category ( category_id int(11) NOT NULL auto_increment, category_title varchar(100) NOT NULL default '', category_desc text NOT NULL, active tinyint(1) NOT NULL default '1', parent int(11) NOT NULL default '0', PRIMARY KEY (category_id) ) TYPE=MyISAM AUTO_INCREMENT=5 ;
CREATE TABLE wr_item ( item_id int(11) NOT NULL auto_increment, category_id int(11) NOT NULL default '0', subject_id int(11) NOT NULL default '0', created bigint(20) NOT NULL default '0', item_title varchar(100) NOT NULL default '', item_content text NOT NULL, active tinyint(1) NOT NULL default '1', PRIMARY KEY (item_id) ) TYPE=MyISAM AUTO_INCREMENT=4 ;
Ja, for lang tid siden samlede jeg på point. Men jeg er blevet klogere ;))
Synes godt om
Ny brugerNybegynder
Din løsning...
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.