par
Hubert Roksor » 16 oct. 2007, 14:38
Je vais faire court puisque le sujet ne reservira probablement pas : si chaque champs non-vide correspond à un plat et
qu'il n'y a qu'un enregistrement par jour et par personne alors il suffit de lire tous les enregistrements, remplacer les champs vides par des 0, les champs non-vides par des 1 et faire le total de chaque ligne.
Code : Tout sélectionner
SELECT menu_jour, (
IF(menu_entree1 = '', 0, 1)
+ IF(menu_entree2 = '', 0, 1)
+ IF(menu_entree3 = '', 0, 1)
+ IF(menu_entree4 = '', 0, 1)
+ IF(menu_resistance1 = '', 0, 1)
+ IF(menu_resistance2 = '', 0, 1)
+ IF(menu_resistance3 = '', 0, 1)
+ IF(menu_resistance4 = '', 0, 1)
+ IF(menu_resistance5 = '', 0, 1)
+ IF(menu_legume1 = '', 0, 1)
+ IF(menu_legume2 = '', 0, 1)
+ IF(menu_legume3 = '', 0, 1)
+ IF(menu_fromage1 = '', 0, 1)
+ IF(menu_fromage2 = '', 0, 1)
+ IF(menu_fromage3 = '', 0, 1)
+ IF(menu_dessert1 = '', 0, 1)
+ IF(menu_dessert2 = '', 0, 1)
+ IF(menu_dessert3 = '', 0, 1)
) AS total
FROM menu
WHERE admin_id = 'kerlochj'
AND menu_semaine = 42
S'il peut y avoir plusieurs ligne pour le même utilisateur pour la même journée, alors il faut faire la somme de tous les totaux d'une journée. Donc la même chose, mais avec un SUM() autour des IF() et un GROUP BY menu_jour.
Je vais faire court puisque le sujet ne reservira probablement pas : si chaque champs non-vide correspond à un plat et [u]qu'il n'y a qu'un enregistrement par jour et par personne[/u] alors il suffit de lire tous les enregistrements, remplacer les champs vides par des 0, les champs non-vides par des 1 et faire le total de chaque ligne.
[code]SELECT menu_jour, (
IF(menu_entree1 = '', 0, 1)
+ IF(menu_entree2 = '', 0, 1)
+ IF(menu_entree3 = '', 0, 1)
+ IF(menu_entree4 = '', 0, 1)
+ IF(menu_resistance1 = '', 0, 1)
+ IF(menu_resistance2 = '', 0, 1)
+ IF(menu_resistance3 = '', 0, 1)
+ IF(menu_resistance4 = '', 0, 1)
+ IF(menu_resistance5 = '', 0, 1)
+ IF(menu_legume1 = '', 0, 1)
+ IF(menu_legume2 = '', 0, 1)
+ IF(menu_legume3 = '', 0, 1)
+ IF(menu_fromage1 = '', 0, 1)
+ IF(menu_fromage2 = '', 0, 1)
+ IF(menu_fromage3 = '', 0, 1)
+ IF(menu_dessert1 = '', 0, 1)
+ IF(menu_dessert2 = '', 0, 1)
+ IF(menu_dessert3 = '', 0, 1)
) AS total
FROM menu
WHERE admin_id = 'kerlochj'
AND menu_semaine = 42[/code]
S'il peut y avoir plusieurs ligne pour le même utilisateur pour la même journée, alors il faut faire la somme de tous les totaux d'une journée. Donc la même chose, mais avec un SUM() autour des IF() et un GROUP BY menu_jour.