Avatar billede cyberesben Nybegynder
04. december 2004 - 23:46 Der 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 ;
       

på forhånd tak for hjælpen
Avatar billede erikjacobsen Ekspert
04. december 2004 - 23:48 #1
Det lyder som du skal bruge en LEFT JOIN
Avatar billede cyberesben Nybegynder
05. december 2004 - 00:23 #2
kan du vise et eksempel på det nævnte?
Avatar billede majkat Nybegynder
06. december 2004 - 14:06 #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
Avatar billede cyberesben Nybegynder
06. december 2004 - 22:06 #4
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 ;
Avatar billede erikjacobsen Ekspert
06. december 2004 - 22:11 #5
Det skal nok være
  group by subject_id
Avatar billede cyberesben Nybegynder
06. december 2004 - 23:51 #6
yes det virker nu...

har grouped på item_id da der godt kan være flere items i et subject...

smid et svar begge to så får i point
Avatar billede majkat Nybegynder
07. december 2004 - 09:29 #7
.
Avatar billede erikjacobsen Ekspert
07. december 2004 - 10:15 #8
Nej tak, jeg samler slet ikke på point
Avatar billede cyberesben Nybegynder
07. december 2004 - 23:08 #9
erikjacobsen: ok, forstået. er det derfor du har 121.297 af dem? (points=
Avatar billede erikjacobsen Ekspert
08. december 2004 - 09:42 #10
Ja, for lang tid siden samlede jeg på point. Men jeg er blevet klogere ;))
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester