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 :

Classement par ordre alphabétique et données de type SET [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Classement par ordre alphabétique et données de type SET
    Bonjour à tous,

    J'ai parmi les colonnes d'une table dans ma BDD, une colonne de type SET, qui peut prendre une ou plusieurs valeurs parmi les valeurs prédéfinies.
    En l’occurrence, ces valeurs sont des noms d'anciennes consoles ("Megadrive", "NES", "SNES", etc.) sur lesquels d'anciens jeux sont sortis.

    Je cherche à classer la liste de ces anciens jeux par console d'origine, dans l'ordre alphabétique des consoles (les jeux de Megadrive viendront avant les jeux NES, eux-mêmes avant les jeux SNES). J'écris donc le petit morceau de code classique ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $sql = 'SELECT `NomColonne1`, `NomColonne2`, `NomColonne3` FROM NomTable ORDER BY `NomColonne2`ASC';
    ?>
    (j'ai juste mis le morceau de code qui nous intéresse ici)

    Cependant, lorsque j'affiche la page web où le tableau apparaît, le classement des jeux par console d'origine a un petit problème.
    Plus précisément, dans le cas des jeux sortis sur deux consoles (par exemple Megadrive et SNES), au lieu d'être classés avec les jeux de la première console dans l'ordre alphabétique (ici la Megadrive), ils sont classés avec les jeux de la seconde console (avec la SNES dans le cas présent).

    Comment puis-je y remédier ?

    Merci d'avance.

    P.S. : Si je n'ai pas réussi à m'exprimer clairement, demandez-moi de poster une capture d'écran du tableau, ça sera peut-être plus parlant.

    Bonne soirée.

    Rebonjour,

    Je ne sais pas si mon message précédent était assez explicite, du coup je poste une capture d'écran pour montrer en quoi le tri obtenu n'est pas optimal.

    http://img4.hostingpics.net/pics/368...nonoptimal.jpg

    Comme on peut le voir, pour l'instant, j'ai très peu rempli la base de données, le but étant pour l'instant de tester les possibilités de tri avant de me mettre au remplissage de la base de données.

    Donc, j'aimerais dans cet exemple que le jeu sorti sur "Arcade" et sur "NES" soit classé avec les jeux "Arcade" (lorsque la base de données sera plus conséquente et qu'il y en aura d'autre ^^⁾, pas avec les jeux "NES" ("Arcade" étant avant "NES" dans l'ordre alphabétique).
    Même chose pour le jeu sorti sur "Megadrive" et sur "SNES".

    Merci d'avance pour vos idées.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Essaie comme ça :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY FIELD(NomColonne2,'Arcade','Megadrive','NES','SNES')
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse.

    Ton idée me donnait une erreur de type "Unexpected T_String", ou d'autres erreurs si je changeais les ' en " ou en `.

    Mais en bricolant un peu, avec beaucoup d'amateurisme et quelques recherches Google, j'ai finit par contourner le problème : plutôt que d'afficher les jeux sortis sur toutes les consoles par liste alphabétique des consoles (comme j'essayais de le faire précédemment), je n'affiche dans une requête que les jeux sortis sur une seule console, par exemple que les jeux sur NES.

    Voici ce que ça donne dans cet exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $sql = 'SELECT `NomColonne1`,`NomColonne2`,`NomColonne3` 
    FROM NomTable
    WHERE `NomColonne2` LIKE "NES%" 
    OR `NomColonne2` LIKE "%,NES%" 
    ORDER BY `NomColonne1` ASC';
    ?>
    Avec NomColonne1 étant dans mon exemple la colonne avec les noms des anciens jeux, et NomColonne2 la colonne avec les noms des anciennes consoles.

    Petite explication :

    La ligne 2 sélectionne les colonnes qui apparaîtrons dans le tableau quand il sera généré
    La ligne 3 indique dans quelle table de la BDD se trouvent les données à récupérer.
    Les lignes 4 et 5 sont là pour récupérer tous les jeux étant sortis sur NES. Je rappelle que, les jeux pouvant être sortis sur une ou plusieurs consoles, j'ai choisi un champ de type SET pour pouvoir gérer cette particularité dans la BDD, ce qui fait que dans le tableau (voir l'image ci-dessus), lorsqu'il y a plusieurs consoles, elles sont listées, séparées par des virgules (sans espaces, mais bon c'est pas trop grave), par exemple "Arcade,NES". Pour gérer cette conséquence, les % agissent ici comme un joker (comme les * dans d'autres langages), pour trouver tout ce qui contient "NES" dans les supports : j'ai rajouté une virgule avant le % à la ligne 5 pour éviter de récupérer en même temps les jeux SNES.
    Enfin, la ligne 6 classe les résultats sur la NES par ordre alphabétique du titre des jeux.

    Voila, je vais passer le sujet en résolu.

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

Discussions similaires

  1. Classement par ordre alphabétique
    Par loucinev dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 24/02/2015, 14h38
  2. Classement par ordre alphabétique ne fonctionne plus
    Par Alixam dans le forum Bibliographies - Index - Glossaires
    Réponses: 2
    Dernier message: 07/08/2012, 15h51
  3. Réponses: 1
    Dernier message: 06/09/2009, 09h11
  4. Classement par ordre alphabétique
    Par crovette51101 dans le forum Access
    Réponses: 5
    Dernier message: 20/12/2006, 14h13
  5. [MySQL] Une liste déroulante affichant les données d'une requête SHOW par ordre alphabétique
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 22/12/2005, 15h53

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