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

 MySQL Discussion :

Trier une table selon la valeur d'un champ


Sujet :

MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 50
    Points : 35
    Points
    35
    Par défaut Trier une table selon la valeur d'un champ
    Bonjour,

    Je souhaiterai trier une table selon la valeur d'un champ pour arrivé à ceci :

    id Nom Sport age

    1 Pierre Football 36
    2 Michel Tennis 22
    3 Louis basketball 18
    4 Antoine Football 22

    Je souhaiterai afficher le résultat de cette façon :

    Football

    1 Pierre
    2 Antoine

    Tennis

    1 Michel

    Basketball

    1 Louis
    Merci d'avance.

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Tout d'abord, un peu de sémantique.
    Ce que tu veux ce n'est pas trier, mais classer, ranger les lignes de la table suivant un certain ORDRE reposant sur des critères.
    Ensuite, il ne faut pas confondre les données et leur présentation, ce que certains auteurs appellent leur rendu.
    SQL est un langage de manipulation de données, la mise en forme des résultats, ce n'est pas son job.
    Pour ce que tu veux obtenir, voici une requête que tu pourras faire évoluer à ta guise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Sports, Nom FROM latable ORDER BY Sport
    Comme tu ne sembles pas vouloir un classement tenant compte de l'ordre aphabétique des Sport mais de l'âge il faudrait aller plus loin.
    Je me suis contenté de classer par Sport. Par défaut le classement se fera par ordre alphabétique croissant [ASC], si tu souhaitais l'inverse il faudrait préciser DESC.
    Puisque tu veux un autre critère de classement, l'âge, il faut compléter la clause ORDER BY de cette façon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY Sport,Age DESC
    Là, Pierre figurera bien avant Paul (36 > 22) dans la rubrique Football.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 50
    Points : 35
    Points
    35
    Par défaut
    Alors voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $result = $ixpdb->sql_query("SELECT Sports, Nom FROM membres_sportifs ORDER BY Sport, Age DESC.");
     
    while ( $row = mysql_fetch_array($result))
     
    echo ''.$row[Sport].'<br />'.$row[Nom].'';
    Voila mais mon problème vient du fait que le résultat se présente comme ceci

    Football

    1 Pierre

    Football

    2 Antoine

    Tennis

    1 Michel

    Basketball

    1 Louis
    et non pas comme je le souhaiterai c'est à dire :

    Football

    1 Pierre
    2 Antoine

    Tennis

    1 Michel

    Basketball

    1 Louis
    Merci pour ton aide Maljuna Kris

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par nandofive Voir le message
    Alors voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $result = $ixpdb->sql_query("SELECT Sports, Nom FROM membres_sportifs ORDER BY Sport, Age DESC.");
    
    while ( $row = mysql_fetch_array($result))
    
    echo ''.$row[Sport].'<br />'.$row[Nom].'';
    [...]
    Nous ne sommes plus dans MySQL mais :
    tu demandes d'afficher le sport et le nom pour chaque tuple ramené par ta requête. Utilises une variable supplémentaire qui stocke le sport au sein de ta boucle et n'affiche le sport que si il est différent du précédent.

  5. #5
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Un autre solution, charge à toi ensuite d'en exploiter le résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Sport, GROUP_CONCAT(Nom ORDER BY Age)
    FROM latable 
    GROUP BY Sport
    ORDER BY Sport

Discussions similaires

  1. [MySQL] Filtrer des éléments d'une liste selon plusieures valeurs d'un champ d'une table bdd
    Par amdawb dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 08/02/2015, 15h59
  2. Réponses: 11
    Dernier message: 25/07/2014, 12h27
  3. MAJ Champs d'une table selon sa valeur et une table de correspondance
    Par eduardo9231 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 26/06/2012, 10h53
  4. Réponses: 2
    Dernier message: 16/04/2008, 00h18
  5. trier une hashtable selon les valeurs
    Par Raylemon dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 20/06/2007, 11h44

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