Re: [LA-discussions] requête mysql |
[ Thread Index | Date Index | More linuxarverne.org/discussions Archives ]
Pierre-Olivier Bonnet a écrit :
J'ai lu rapidement et à mon avis un schema de ce type serait plus simple à manipuler : table livres : id / titre table personnes : id / nom table criteres : id / nom table evaluations : id_livre / id_personne / id_critere / date
j'ai d'abord créé plusieurs tables à partir d'une table complète mais la solution de kewlCat est plus économique puisque on me fournit un fichier csv complet que j'importe dans une table (complète). La requête unique
porte sur cette table.
Et, je n'ai pas testé mais un truc du genre select count(id_critere) FROM evalutations GROUP BY id_livre, id_critere devrait repondre ensuite à la question 2009/5/23 KewlCat <kewlcat@xxxxxxx>:jean-luc boutin wrote:KewlCat a écrit :Rebonsoir ! En fouillant dans la doc MySQL j'ai trouvé une utilisation détournée de la clause IN qui va bien nous servir :-) En effet, MySQL fait en sorte que la clause IN retourne 0 ou 1 en fonction de la présence d'une valeur dans la liste fournie. Atttention, détournement : SELECT Colonne1, SUM(Colonne2 IN ('NUL')), SUM(Colonne2 IN ('ASSEZ BON')), SUM(Colonne2 IN ('BON')), SUM(Colonne2 IN ('TRES BON')), SUM(Colonne2 IN ('EXCELLENT')) FROM Table1 GROUP BY Colonne1 ORDER BY Colonne1;Je viens de tester et ça marche avec comme nom de colonne SUM(Colonne2 IN ('ASSEZ BON')) SUM(Colonne2 IN ('BON')) etc.... et des 0 quand il n'y a pas un type d'evaluation correspondant à un titre. C'est ce que je voulais en une seule requête. Merci mille fois.Et voilà ! Pas besoin de tableau de valeurs intermédiaire, la requête porte tous les résultats (sauf les valeurs de Colonne2, mais pour cette fois j'ai supposé qu'elles étaient connues et utilisables "en dur"). Dans le cas où les valeurs de Colonne2 ne sont pas connues à l'avance, il faudra faire une première requête à la recherche de DISTINCT Colonne2 puis générer la requête ci-dessus pour ensuite afficher les entêtes de tableau dans l'ordre dans lequel ils auront été récupérés par la seconde requête. =^.^= --- Liste de discussions de LinuxArverne http://wiki.linuxarverne.org/listes_de_diffusion--- Liste de discussions de LinuxArverne http://wiki.linuxarverne.org/listes_de_diffusionSi c'est le nom des colonnes qui t'embête, tu peux les nommer en donnant l'alias derrière l'expression qu'elles retournent : SELECT Colonne1, SUM(Colonne2 IN ('NUL')) NUL, SUM(Colonne2 IN ('ASSEZ BON')) ASSEZ_BON, SUM(Colonne2 IN ('BON')) BON, SUM(Colonne2 IN ('TRES BON')) TRES_BON, SUM(Colonne2 IN ('EXCELLENT')) EXCELLENT FROM Table1 GROUP BY Colonne1 ORDER BY Colonne1; Content d'avoir pu te dépanner ;-) --- Liste de discussions de LinuxArverne http://wiki.linuxarverne.org/listes_de_diffusion--- Liste de discussions de LinuxArverne http://wiki.linuxarverne.org/listes_de_diffusion
--- Liste de discussions de LinuxArverne http://wiki.linuxarverne.org/listes_de_diffusion
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |