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

Requêtes MySQL Discussion :

Requète de tri selon plusieurs critères


Sujet :

Requêtes MySQL

  1. #21
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 33
    Points : 6
    Points
    6
    Par défaut
    Ce serait plutôt ça non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT m.date, table_pronos.id_user, SUM( pts )+pts_bonus AS sumpts, SUM(IF(pts=3,1,0)) AS nbperfect,
    FROM table_match
    INNER JOIN table_pronos ON table_match.id = table_pronos.id_match
    LEFT JOIN bonus b ON table_pronos.id_user=b.id_user
    GROUP BY table_pronos.id_user
    ORDER BY sumpts DESC,nbperfect DESC
    Mais ça ne marche pas

  2. #22
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    non je viens de voir que je me suis juste planté sur le sur-nommage dans le left join:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT m.date, p.id_user, SUM( pts )+pts_bonus AS sumpts, SUM(IF(pts=3,1,0)) AS nbperfect
    FROM table_match m
    INNER JOIN table_pronos p ON m.id = p.id_match
    LEFT JOIN bonus b ON b.id_user=p.id_user
    GROUP BY p.id_user
    ORDER BY sumpts DESC,nbperfect DESC
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  3. #23
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 33
    Points : 6
    Points
    6
    Par défaut
    ce que je voulais dire dans mon précédent message c'est que le champ id_user n'est pas sur la table match mais sur la table pronos.

    Juste une petite question car je n'ai pas l'habitude d'utiliser des alias (m.date au lieu de table_match.date), c'est simplement pour des raisons d'optimisation ou il y a une subtilité que je n'ai pas compris ?

  4. #24
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    ça compacte l'écriture... tu trimbales pas de longs noms de table ça fait mieux ressortir les colonnes des tables concernées...

    tu peux avoir une jointure sur une table qui est elle même en jointure sur la table principale c'est pas un soucis...

    j'ai rectifié la requête je pense qu'elle devrait marcher
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  5. #25
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 33
    Points : 6
    Points
    6
    Par défaut
    Merci pour l'info

    Sinon pour la requète je pense qu'il y avait une virgule en trop (après nbperfect)


    SELECT m.date, p.id_user, SUM( pts )+pts_bonus AS sumpts, SUM(IF(pts=3,1,0)) AS nbperfect
    FROM table_match m
    INNER JOIN table_pronos p ON m.id = p.id_match
    LEFT JOIN bonus b ON b.id_user=p.id_user
    GROUP BY p.id_user
    ORDER BY sumpts DESC,nbperfect DESC
    Par contre le résultat n'est toujours pas au rendez-vous... j'ai un résultat complètement hallucinant (20000 pts au lieu de 250 pour le 1er)

  6. #26
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    tu as une , avant le from
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  7. #27
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 33
    Points : 6
    Points
    6
    Par défaut
    Nos messages se sont croisés, c'était bien la virgule

  8. #28
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    oui comme j'avais repris ta requête j'avais pas fait gaffe à elle...

    bon si ça marche enfin tu vas pouvoir passer en résolu...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  9. #29
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 33
    Points : 6
    Points
    6
    Par défaut
    La virgule m'a permis de résoudre le message d'erreur mais comme je le précise dans mon précédent message je n'ai absolument pas le résultat désiré et la requète met plus d'une minutes en locale

  10. #30
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    bon faut que j'essaye concretement...

    ton temps d'exécution est hallucinant... tu as tant de ligne que ça?

    file moi les create de tes tables

    et un jeu de teste sous forme d'insert sur chaque... je suppose que c'est encore un bd de test que tu as...

    si tu as correctement indexé tes tables ça devrait pas être si long...

    et là on va avancer car de tête c'est pas évident... je suis pas un compilateur...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  11. #31
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 33
    Points : 6
    Points
    6
    Par défaut
    ca marche je t'envoie ça par mp ...

  12. #32
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    /* 0 rows affected, 157 rows found. Duration for 1 query: 19,610 sec. */
    donc tu dois sérieusement te poser des question sur la la machine, la configuration de l'OS, d'une éventuelle VM et/ou du serveur mysql que tu utilises pour les tests...

    le classement m'a l'air correct... le premier est :
    2011-08-06 21:00:00,7,11210,2128
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  13. #33
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Juste en passant vite fait sur la requête proposée...
    Toutes les colonnes du SELECT ne figurant pas dans une fonction de groupage doivent figurer dans le GROUP BY sous peine de récupérer pour les colonnes absentes des résultats aléatoires.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  14. #34
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    regarde le miracle quand j'ai les tables et qu'on part pas d'un postulat faux:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select p.id_user as `users`,SUM(p.pts)+b1.bonus as 'total',SUM(IF(pts=3,1,0)) as `departage`
    from league_pronos p
    left join(
    	select b.id_user as `id_user`,sum(bonus) as `bonus`
    	from league_bonus b
    	group by b.id_user
    ) b1 on b1.id_user=p.id_user
    group by `users`
    order by `total` desc,`departage` desc;

    au passage, toutes tes tables sont à revoir...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  15. #35
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 33
    Points : 6
    Points
    6
    Par défaut
    Ca me semble mieux sauf qu'il n'y a plus la table match dans cette requète et c'est celle-ci qui me permet de faire les filtres donc je ne peux voir si le résultat est correct.

    Qu'entends tu par "regarde le miracle quand j'ai les tables et qu'on part pas d'un postulat faux"

    Que faut-il améliorer au niveau des tables ? je ne suis pas développeur de formation donc je reconnais que tout n'est probablement pas optimisé

  16. #36
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    normal je l'ai viré car elle n'as rien à y faire directement ou au pire on fait une jointure ou une sous-requête sur elle dans le where...

    tout un tas de trucs son répétitif et ne servent à rien...

    la saison d'un match n'a rien à faire ailleurs que dans la table match...

    pire tu peux le générer à la volée vu que c'est juste dépendant de l'année de la date du match... donc saison peut (et doit) disparaitre dans toutes les table...

    j'ai du faire une jointure pour le bonus car en fait tu n'as pas une seule entrée par utilisateur... donc il fallait sommer le bonus... n'est-ce pas à revoir...?

    ensuite bien sur, placer les index sur les colonnes qui servent aux jointures...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  17. #37
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 33
    Points : 6
    Points
    6
    Par défaut
    la saison d'un match n'a rien à faire ailleurs que dans la table match...
    => je suis tout à fait d'accord avec toi et cela fait partie de modification que je dois apporter mais cela implique de nombreuses requètes à modifier (il y a actuellement 66 tables dans la bdd)
    Sur ce point j'ai prévu de créer une table saison qui contiendrait quelques infos me permettant d'accèder à certaine sinfos relatives à la saison. (date début du concours qui n'est pas forcément la même que le début du championnat, ....)

    j'ai du faire une jointure pour le bonus car en fait tu n'as pas une seule entrée par utilisateur... donc il fallait sommer le bonus... n'est-ce pas à revoir...?
    => Cette table bonus me pose bien des soucis car il y a plusieurs concours et elle ne s'applique que pour le concours sur la Ligue 1 et de plus il se peut que certains participants ne répondent pas à la question qui permet d'obtenir ce bonus.

  18. #38
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 33
    Points : 6
    Points
    6
    Par défaut
    cette fois ça marche avec quelques filtres en plus pour affiner ta requète

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [AC-2010] Requête suppression selon plusieurs critères
    Par stsym dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 18/01/2013, 05h01
  2. [MySQL] Trouver un article selon plusieurs critères de tri
    Par HAbroc dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/05/2012, 08h58
  3. [V6] Tris selon plusieurs critères
    Par AD1983 dans le forum Webi
    Réponses: 1
    Dernier message: 02/11/2011, 11h03
  4. Tri Liste d'objet selon plusieurs critéres
    Par missd12 dans le forum Langage
    Réponses: 4
    Dernier message: 06/07/2010, 09h15
  5. [HASHING] Trie selon plusieurs critères
    Par hush dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 24/07/2006, 06h54

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