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_diffusion

Si 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/