Bonjour,

Je cherche à parcourir une table et faire 2 count dans une autre le tout en 1 requête, exemple:



Voici la structure des deux tables:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
CREATE TABLE `terms` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `term` varchar(50) NOT NULL default '',
  `status` enum('0','1') NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `term` (`term`),
  KEY `status` (`status`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
CREATE TABLE `suggests` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `suggest` varchar(50) NOT NULL default '',
  `termid` smallint(6) unsigned NOT NULL default '0',
  `status` enum('0','1') NOT NULL default '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `suggest` (`suggest`),
  KEY `termid` (`termid`),
  KEY `status` (`status`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
et la requête utilisée pour le moment:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
SELECT t.id, t.term, tmp_todo.nb_todo, tmp_done.nb_done
	FROM terms t
LEFT JOIN (SELECT s.termid, count(s.status) AS nb_todo FROM suggests s WHERE s.status = '0' GROUP BY s.termid) tmp_todo ON t.id = tmp_todo.termid
LEFT JOIN (SELECT s.termid, count(s.status) AS nb_done FROM suggests s WHERE s.status = '1' GROUP BY s.termid) tmp_done ON t.id = tmp_done.termid
	WHERE t.status = '0'
GROUP BY t.id
	ORDER BY t.term ASC
LIMIT 10
Quand j'utilise cette requête dans une boucle while, ceci boucle sur le premier résultat uniquement...

Merci d'avance pour votre aide, cordialement