Re: [LA-discussions] requête mysql

[ Thread Index | Date Index | More linuxarverne.org/discussions Archives ]


jean-luc boutin wrote:
neomilium a écrit :
Le vendredi 22 mai 2009 11:25:08 jean-luc boutin, vous avez écrit :
Merci pour vos promptes réponses que je me suis empressé d'essayer.
Malheureusement aucune ne fonctionne ou ne donne le résultat escompté.
Quelle requête ne donne pas le résultat escompté ?
Es tu sûr que ce sont des jointures à gauche qu'il te faut ?
Peut-être qu'avec un peu plus de détails sur les tables de départ et le résultat voulu, on pourrait mieux t'aider.

Pour plus de clarté je précise en le transposant pour des raisons de confidentialité le contenu de ma base.

Imaginons que je gère des livres pour une bibliothèque de prêt. Je dispose du titre des ouvrages et de différentes appréciations par les lecteurs qui les ont empruntés. Ces appréciations sont par exemple "NUL" "ASSEZ BON" "BON" "TRES BON" "EXCELLENT".

La colonne1 contient les titres des ouvrages par exemple:

LIvre1
Livre1
Livre1
Livre1
Livre1
Livre2
Livre2
Livre2
Livre2
Livre2
Livre2
Livre3
Livre3
Livre3
....
les titres apparaissent autant de fois qu'ils ont été évalués par les lecteurs. Par exemple le Livre1 a été évalué 4 fois par 4 lecteurs. Supposons que personne ne l'ait trouvé NUL, 1 l'ait trouvé "ASSEZ BON", 2 l'aient trouvé "BON" et 1 "EXCELLENT".
Ces valeurs sont mises en face du titre dans une Colonne2

j'ai donc

Colonne1                         Colonne2

Livre1                               Assez Bon
Livre1                               BON
Livre1                               BON
Livre1                               Excellent

....
et ainsi de suite pour tous les autres titres. Ce que je veux obtenir c'est un tableau qui m'indique sur la Colonne1 le titre du livre, sur la Colonne2 le nbre de "NUL", sur la Colonne3 le nbre de "Assez bon", sur la Colonne4 le nbre de "Bon", sur la Colonne5 le nbre de "Tres bon" et sur la Colonne6 le nbre de "Excellent" J'ai donc :


Colonne1 Col2 Col3 Col4 Col5 Col6 Titre NUL ASSEZ BON BON TRES BON EXCELLENT

Livre1 --- 1 2 ---- 1 Livre2 1 3 ---- ---- 1
.......
etc

J'ai donc créé autant de tables qu'il y a de valeurs à partir de ma base qui comprennent en colonne1 les titres évalués et en colonne2 la valeur . soit NUL pour la table1 "assez bon" pour la table2 "bon" pour la table3 etc.... Bien évidemment certains titres se retrouvent dans toutes les tables d'autres dans certaines tables seulement en fonction des évaluations qui en ont été faites. Il faut donc que dans mon tableau final j'ai dans la colonne1 tous les titres évalués et dans les colonnes 2,3,4,5,6 le nombre d'évaluations correspondantes. J'ai pu faire cela en plusieurs étapes mais pas en une seule requête complexe.

---
Liste de discussions de LinuxArverne
http://wiki.linuxarverne.org/listes_de_diffusion

Bonsoir.

Est-ce qu'une requête de ce style pourrait te convenir ?
SELECT Colonne1, Colonne2, COUNT(1) FROM Table1 GROUP BY Colonne1, Colonne2 ORDER BY Colonne1;
Ca te retourne un décompte des différentes associations { Livre ; Note }.
Certes, ça ne te listera pas les associations qui n'existent pas, mais logiquement pour construire l'affichage de ton résultat tu vas, à un moment ou à un autre, aller récupérer la liste des différents titres de livres et la liste des différentes notes possibles, et pour remplir ce tableau tu vas aller piocher dans la structure de données (au hasard, un tableau à deux dimensions) qui stocke les notes données et que tu auras préalablement initialisé avec des zéros, non ? ;-) Après, je ne garantis pas d'avoir tout compris, mais pour ce que tu décris ici, cette requête fonctionne.

  =^.^=

---
Liste de discussions de LinuxArverne
http://wiki.linuxarverne.org/listes_de_diffusion


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/