IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Créer Requête Multi-Critères


Sujet :

PHP & Base de données

  1. #1
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut [SQL] Créer Requête Multi-Critères
    Bonjour à tous,

    Le problème est simple :

    Sur un CMS type Reseau social, les membres ont chacun un nombre de vote et une note(sur 5), j'aimerai réaliser un classement qui prenne en compte ces deux paramètres...

    Si j'etablis un classement sur la note, le membre peut avoir une note de 5, seulement 2 votes et se retrouver en tête de classement...
    Et contrairement si j'etablis un classement sur le nombre de vote, le membre peut se retrouver en tête de classement avec 15 votes mais une note de 2.5

    Peut être existe t'il une requête permettant d'établir ce genre de classement ou peut être faut t'il user d'une autre technique ?

    Dans tous les cas j'ai pas réussi à faire un classement qui retourne un resultat correct (equilibre entre note et votes en gros).

    Merci

  2. #2
    Membre régulier Avatar de MikeV
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    Bonjour,
    Je n'ai jamais fait ce genre de truc mais personnellement je ferai quelque chose comme ca:

    - Créer une variable php $importance = un chiffre de 1 à 10
    - Cette variable $importance désigne l'importance du classement.
    - Elle est obtenue en prenant le plus grand nombre de vote divisé par 10
    (exemple: Fabrice est celui qui a le plus de vote (134 votes) donc 134 / 10 = 13,4)
    - maintenant pour déterminer ton classement, lors de l'affichage tu divises le nb de votes de chacun par 13,4. (Exemple: Roger à 58 votes = 58 / 13,4 = 4, donc $importance = 4 pour Roger.
    - Donc si dans ton classement tu arrives avec cela:
    Nom |points |importance
    Régis |3.3 |2
    Roger |3.3 |8
    Emilie |3.3 |1
    Jean |3.3 |7
    Jeanne |3.3 |5

    Tu peux facilement déterminer qui mérites sa place ! Emilie,Régis,Jeanne,Jesn.Roger

    Qu'en penses-tu ?

  3. #3
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Re,

    Merci de ta réponse

    Oui c'est une bonne idée mais je viens de me rendre compte d'un truc...

    Je fais un classement de 20, si je fesais simplement une sous-requête ?

    Genre je selectionne les 20 membres ayant le plus de vote, et la sous-requête classerai ces 20 par note, ça ferai un classement logique, non ?

    C'est sur que tant qu'il y a pas bcp de membres le classement serait peut etre pas très significatif...

    Je sais pas comment faire ça exactement mais je vais chercher

    Merci =)

    EDIT : En fait non je dis des bêtises le classement sera pas très bon non plus, pour ta solution d'importance j'ai bien saisi ta réponse mais pas trop ce que ça donnerait...

    Voilà le classement que j'ai actuellement (classé par vote) :

    1. hellowkittycandy (Note : 4.2) Vote(s) : 10
    2. Lucie (Note : 3.9) Vote(s) : 9
    3. marion (Note : 4.87) Vote(s) : 8
    4. Clow (Note : 4.57) Vote(s) : 7
    5. divinekate78 (Note : 4) Vote(s) : 6
    6. Elise78 (Note : 4.17) Vote(s) : 6
    7. KyriO (Note : 4.67) Vote(s) : 6
    8. Guit0o (Note : 5) Vote(s) : 5
    9. Alaedyna (Note : 4.2) Vote(s) : 5
    10. Elza (Note : 5) Vote(s) : 5
    11. PierO (Note : 5) Vote(s) : 4
    12. Angel212 (Note : 4.67) Vote(s) : 3
    13. GIKUMI (Note : 3.67) Vote(s) : 3
    14. Kasabian (Note : 5) Vote(s) : 3
    15. Lilou (Note : 5) Vote(s) : 3
    16. Alexandre (Note : 5) Vote(s) : 3
    17. gregoire (Note : 5) Vote(s) : 3
    18. Lelodie (Note : 5) Vote(s) : 3
    19. HEiiLLE (Note : 5) Vote(s) : 3
    20. ptyflo (Note : 5) Vote(s) : 3
    Ca devrait être marion en premier...

    Si je fais avec ma sous-requête c'est tous ceux qui ont 5 de note qui vont être premier...

    Merci

  4. #4
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Un petit coup de pouce ?

    MikeV ta solution va placer ceux qui ont le moins de votes dans les premières places...

    EDIT : Je cherche toujours une petite solution

    Merci =)

  5. #5
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Re,

    J'ai trouvé une petite alternative qui rend un classement un peu mieux...

    Voilà ce que j'ai fait pour ceux que ça interesse :

    J'ai rajouté un champ dans la table user, le champ moyenne.

    Le champ moyenne contient pour chaque utilisateur la moyenne de la place du classement vote et du classement note.

    Exemple, Eric a 6 votes et une note de 4.8, avec ses 6 votes il occupe la 5eme place du classement vote et la position 3 au classement note.

    Donc 5 + 3 = 8, 8/2 = 4, 4 est stocké dans le champ moyenne.

    Ensuite lorsque j'etablis le classement, c'est sur moyenne que le tri se fait...


    Exemple de resultat :

    1. marion (Note : 4.88) Vote(s) : 9
    2. rockstarx (Note : 4.87) Vote(s) : 8
    3. Elza (Note : 5) Vote(s) : 6
    4. Lilou (Note : 5) Vote(s) : 5
    5. ExSansTrick (Note : 5) Vote(s) : 5
    6. Kasabian (Note : 5) Vote(s) : 3
    7. PierO (Note : 5) Vote(s) : 4
    8. HEiiLLE (Note : 5) Vote(s) : 3
    9. MelleCam (Note : 5) Vote(s) : 4
    10. baptiste (Note : 5) Vote(s) : 3
    11. Toreo (Note : 4.65) Vote(s) : 14
    12. Lucie (Note : 4.61) Vote(s) : 14
    13. hej (Note : 5) Vote(s) : 3
    14. gregoire (Note : 5) Vote(s) : 3
    15. Lelodie (Note : 5) Vote(s) : 3
    16. Guit0o (Note : 4.83) Vote(s) : 6
    17. Lara (Note : 5) Vote(s) : 4
    18. ptyflo (Note : 5) Vote(s) : 3
    19. Annes0w (Note : 5) Vote(s) : 3
    20. princ3ssdeperle (Note : 5) Vote(s) : 3
    Merci MikeV

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. requête multi-critère timestamp
    Par pp_le_moko dans le forum Débuter
    Réponses: 1
    Dernier message: 22/01/2010, 12h21
  2. [MySQL] requête multi-critère timestamp
    Par pp_le_moko dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 22/01/2010, 10h59
  3. [AC-2007] Requête multi critères
    Par vitoje7 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/09/2009, 19h32
  4. requête multi-critère parametrable
    Par milady dans le forum Oracle
    Réponses: 7
    Dernier message: 25/09/2006, 14h08
  5. [Access-VBA] Requête multi-critère/Formulaire en mode continu
    Par adriano057 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 02/08/2006, 10h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo