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 :

classements multiples en 1 requete uniquement


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Par défaut classements multiples en 1 requete uniquement
    Donc voilà un petit exemple très simplifié pour vous expliquer mon problème :
    my_table
    id | prenom | age
    -----------------
    1 | paul | 45
    2 | louis | 32
    3 | rene | 68
    4 | ciryl | 24
    5 | jean | 30

    Je voudrais savoir si en une seule requête je peux récupérer les 2 personnes les plus agées (donc par classement en ordre numérique décroissant sur la colonne age j'obtiens rene puis paul) et obtenir le résultat de ma requète classé sur leur prenom par ordre alphabétique croissant (soit au final paul puis rene).
    J'ai l'impression que ce n'est pas possible en une seule requete, est-ce que je me trompe ? (à ce moment là, j'effectue mon classement alphabétique sur les prenoms en php par exemple)

    P.S: la colonne prenom est en UNIQUE

  2. #2
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Citation Envoyé par warpyou
    J'ai l'impression que ce n'est pas possible en une seule requete, est-ce que je me trompe ?
    Ca dépend de votre version de mysql !
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Par défaut
    là je tourne sur la 3.23.54-nt, mais ça me pose aucun soucis d'upgrader à la dernière.

  4. #4
    Membre confirmé Avatar de chasse
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 78
    Par défaut
    Et avec qqch de ce style, pour ordrer par age puis par nom...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Select * from table order by Nom where id =
    (Select id from table order by age)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Par défaut
    Citation Envoyé par chasse
    Et avec qqch de ce style, pour ordrer par age puis par nom...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Select * from table order by Nom where id =
    (Select id from table order by age)
    J'aurai du préciser mais je cherchais une possibilité sans subselect qui pour moi s'apparente à une double requete (dans mon projet, la rapidité des requettes SQL est cruciale)

  6. #6
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Voici la solution en une seule requête, mais attention, elle ne respecte pas les standards de la norme SQL. Les prénoms ne seront classés par ordre alphabétique que si les deux personnes les plus agées ont le même âge.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT ID, PRENOM, AGE
      FROM MY_TABLE
     ORDER BY AGE DESC, PRENOM ASC
     LIMIT 2
    Juste une question pour la suite, votre requête finale, donc celle non simplifiée, remontera-t-elle que 2 valeurs ou peut-elle en remonter plus.
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Par défaut
    Citation Envoyé par Alexandre T
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT ID, PRENOM, AGE
      FROM MY_TABLE
     ORDER BY AGE DESC, PRENOM ASC
     LIMIT 2
    Oui, j'ais essayé ça, mais le problème c'est que age n'a pas forcément la même valeur donc ça ne marche pas (de même dans l'autre sens avec des prenoms identiques) et en effet, sur ma requete complexe LIMIT peut être aussi bien 10 que 100. Je pense qu'il ne reste plus qu' à me rabattre sur le classement alphabétique avec PHP après la requète SQL.

Discussions similaires

  1. [AC-2007] Exécuter une requete uniquement pour l'élément en cours
    Par eliottgiraudo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/08/2013, 16h06
  2. requete uniquement de jointures externes
    Par meric92 dans le forum Requêtes
    Réponses: 10
    Dernier message: 10/06/2011, 10h44
  3. Classement personnalisé d'une requete mysql
    Par Dlteck2000 dans le forum Langage
    Réponses: 1
    Dernier message: 24/08/2010, 12h02
  4. Problème d'affichage multiple d'une requete
    Par Devilju69 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/06/2009, 10h57
  5. Réponses: 2
    Dernier message: 30/11/2007, 17h54

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