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:
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
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 ;
Quand j'utilise cette requête dans une boucle while, ceci boucle sur le premier résultat uniquement...
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
Merci d'avance pour votre aide, cordialement









Répondre avec citation
Partager