Re: [LA-discussions] requête mysql |
[ Thread Index |
Date Index
| More linuxarverne.org/discussions Archives
]
- To: discussions@xxxxxxxxxxxxxxxx
- Subject: Re: [LA-discussions] requête mysql
- From: Pierre-Olivier Bonnet <pierre.olivier.bonnet@xxxxxxxxx>
- Date: Sat, 23 May 2009 09:41:22 +0200
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=k1i1knkgigTl5Udb3lqJlYqL5ZG+OWWlmNnlBD/AFok=; b=OEv6zU+Y+DOouhhQjZA9dsp2YPtvp3PyGQ8jO5bctw6PttEb+m9e7RsIFI+R8z6lCf FJVNnvLa+RnC14+cvUvFXFWUmxvx6MM9YzbYY8kvCVGrXFADbUKgRIXg03FNHDTbj5+L YAisrIWvISMX7cY+YxA3cK2+zCAIXHGnsp/WA=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=wYs+UyHp+/8nWkFNl+uC5esMDtL8DIThBZawL4YrHINmjtTvozxbN5qBlfRucbkDQ6 OwStdoHlj7u4l97iUk4OoyO9epbKpBJ64VE37a4cJYYsFCWOxAjICvco0/ytNsuRI3PX MdU94U3UF3YTS/iWEa3ez0R6JjquYdNe6KSKs=
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
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