Forum Clubic

Problème de comptage

Bonjour,

Voila je suis coincé dans mon développement, j’ai ma table qui se trouve sous cette forme…


CREATE TABLE `menu` ( 
`menu_id` int(11) NOT NULL auto_increment, 
`menu_semaine` int(9) NOT NULL default '0', 
`menu_jour` varchar(10) NOT NULL default '', 
`menu_entree1` varchar(100) NOT NULL default '', 
`menu_entree2` varchar(100) NOT NULL default '', 
`menu_entree3` varchar(100) NOT NULL default '', 
`menu_entree4` varchar(100) NOT NULL default '', 
`menu_resistance1` varchar(100) NOT NULL default '', 
`menu_resistance2` varchar(100) NOT NULL default '', 
`menu_resistance3` varchar(100) NOT NULL default '', 
`menu_resistance4` varchar(100) NOT NULL default '', 
`menu_resistance5` varchar(100) NOT NULL default '', 
`menu_legume1` varchar(100) NOT NULL default '', 
`menu_legume2` varchar(100) NOT NULL default '', 
`menu_legume3` varchar(100) NOT NULL default '', 
`menu_fromage1` varchar(100) NOT NULL default '', 
`menu_fromage2` varchar(100) NOT NULL default '', 
`menu_fromage3` varchar(100) NOT NULL default '', 
`menu_dessert1` varchar(100) NOT NULL default '', 
`menu_dessert2` varchar(100) NOT NULL default '', 
`menu_dessert3` varchar(100) NOT NULL default '', 
`menu_pc1` varchar(10) NOT NULL default '', 
`menu_pc2` varchar(10) NOT NULL default '', 
`menu_pc3` varchar(10) NOT NULL default '', 
`menu_pc4` varchar(10) NOT NULL default '', 
`menu_pc5` varchar(10) NOT NULL default '', 
`admin_id` varchar(10) NOT NULL default '', 
PRIMARY KEY (`menu_id`)  
 

Ensuite j’ai tout plein de valeurs dedans. Ce que j’aimerai c’est faire des calculs avec plusieurs requettes.
Je m’explique, j’aimerai avoir le nombre de plat que l’utilisateur “lamba” a pris pour une semaine donnée.

Voici la premiere requette que j’arrive a avoir :


SELECT `admin_id` , `menu_semaine` , `menu_jour` , `menu_entree1` , `menu_entree2` , `menu_entree3` , `menu_entree4` , `menu_resistance1` , `menu_resistance2` , `menu_resistance3` , `menu_resistance4` , `menu_resistance5` , `menu_legume1` , `menu_legume2` , `menu_legume3` , `menu_fromage1` , `menu_fromage2` , `menu_fromage3` , `menu_dessert1` , `menu_dessert2` , `menu_dessert3` 
FROM menu 
WHERE `menu_semaine` =42 
AND `admin_id` = 'kerlochj' 
LIMIT 0 , 30  
 

apres cette requete j’obtiens ca http://www.corolle.com/video/test.JPG

Mais une fois que j’ai cette requette je dois calculer le nombre de plats qu’il a pris:

c’est a dire que je dois obtenir :

Kerlochj | 42 |Lundi | 5
Kerlochj | 42 |Mardi | 5
kerlochj | 42 |Mercredi | 5

Je pense qu’il faut faire une requete imbriquer avec en premier condition la premiere requete et la seconde requete avec du count ou du som mais la probleme c’est que je sais pas trop faire…

Merci de votre aide.

Pk si je mets cette requette ca ne fonctionne pas ??

SELECT admin_id, menu_semaine, menu_jour, count( menu_entree1 ) + count( menu_entree2 ) + count( menu_entree3 ) + count( menu_entree4 ) + count( menu_resistance1 ) + count( menu_resistance2 ) + count( menu_resistance3 ) + count( menu_resistance4 ) + count( menu_resistance5 ) + count( menu_legume1 ) + count( menu_legume2 ) + count( menu_legume3 ) + count( menu_fromage1 ) + count( menu_fromage2 ) + count( menu_fromage3 ) + count( menu_dessert1 ) + count( menu_dessert2 ) + count( menu_dessert3 ) 
IN (


SELECT `admin_id` , `menu_semaine` , `menu_jour` , `menu_entree1` , `menu_entree2` , `menu_entree3` , `menu_entree4` , `menu_resistance1` , `menu_resistance2` , `menu_resistance3` , `menu_resistance4` , `menu_resistance5` , `menu_legume1` , `menu_legume2` , `menu_legume3` , `menu_fromage1` , `menu_fromage2` , `menu_fromage3` , `menu_dessert1` , `menu_dessert2` , `menu_dessert3` 
FROM menu
WHERE admin_id = 'kerlochj'
AND menu_semaine = '42'
)
GROUP BY `admin_id` , `menu_semaine` , `menu_jour` 

Bonjour,
ça ne sert à rien de faire une requête imbriquée (et c’est une mauvaise idée 12 fois sur 10), donc enlève le “IN”, et il faut indiquer les colonnes sans ’ '.


Code :SELECT admin_id, menu_semaine, menu_jour, count( menu_entree1 ) + count( menu_entree2 ) + count( menu_entree3 ) + count( menu_entree4 ) + count( menu_resistance1 ) + count( menu_resistance2 ) + count( menu_resistance3 ) + count( menu_resistance4 ) + count( menu_resistance5 ) + count( menu_legume1 ) + count( menu_legume2 ) + count( menu_legume3 ) + count( menu_fromage1 ) + count( menu_fromage2 ) + count( menu_fromage3 ) + count( menu_dessert1 ) + count( menu_dessert2 ) + count( menu_dessert3 )   FROM menu WHERE admin_id = 'kerlochj' AND menu_semaine = '42' 
 GROUP BY admin_id , menu_semaine , menu_jour 

Si je peux me permettre, elle est drôlement mal gaulée ta table :D, une jointure sur une table “plat” avec une colone type qui vaut “entrée” “résitance” légume etc… aurait été plus indiquée… (avec menu_id comme clef étrangère)

CREATE TABLE plat ( menu_id int(11) NOT NULL ,
type varchar(10) NOT NULL default ‘’,
desc varchar(100) NOT NULL default ‘’,

edit: toutes les colonnes sont “not null” je ne sais pas si le count() ne va pas compter les colonnes à ’ '. ?
Edité le 16/10/2007 à 12:08