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

Langage SQL Discussion :

[MySQL] classer par ordre numérique


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Avatar de july
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 98
    Points
    98
    Par défaut [MySQL] classer par ordre numérique
    Bonjour à tous,

    Voila un petit moment que je suis sur ce problème sans trouver la solution...

    J'exécute une requete sur ma table (classique !) et j'aimerai récupérer les résultat par ordre numérique.
    Par exemple dans ma colonne j'ai :
    test2, test25, test1, test3, test12...

    Si je ne fais pas d'ORDER, il retourne dans l'ordre des enregistrements

    Si j'utilise ORDER BY, il retourne : test1 test12 test2 test25 test3
    Car j'imagine que c'est l'ordre alphabétique.
    Je ne peux pas changer mon champ de VARCHAR à BIGINT (par ex) à cause de 'test'.

    Du coup je ne sais vraiment pas comment faire !!!

    Merci par avance de votre aide !

  2. #2
    Membre habitué Avatar de nesbla
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 220
    Points : 139
    Points
    139
    Par défaut
    Bonjour,

    n'est-il pas possible d'utiliser une fonction de SQL pour extraire la partie numérique de ton champs dans le order by ?

    par exemple (je me souviens plus de la syntaxe exacte de SUBSTRING) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY SUBSTRING(ma colonne, x, x) asc
    Je ne sais pas si ça marche mais tu peux toujours essayer.
    ··· Champion des excuses bidons ··· Je viens d'apprendre que les ventes de voitures ont encore baissé de 7% en France. Y'en a marre de ces pirates qui téléchargent les voitures sur internet !

  3. #3
    Membre régulier
    Avatar de july
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 98
    Points
    98
    Par défaut
    Bonjour,

    Merci encore de la réponse.
    J'ai fait la requete suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT u.login FROM user u WHERE u.login like '%test%' ORDER BY SUBSTRING(u.login, LENGTH('test')+1) ASC
    J'ai fait des tests, il fait bien le classement sur les chiffres (1, 2, 3, 12).
    Cependant il classe tjs de la même façon : 1, 12, 2, 25, 3 !!!

    Avez vous une idée ? Est ce à cause du champ qui est varchar ?

    Merci

  4. #4
    Membre régulier
    Avatar de july
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 98
    Points
    98
    Par défaut
    Je précise que j'ai rempli un champ BIGINT.
    Lorsque j'exécute : select * from user order by champ
    il classe dans l'ordre qui me convient ( à savoir : 1, 2, 3, 12, 25)

  5. #5
    Membre régulier
    Avatar de july
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 98
    Points
    98
    Par défaut
    Bon j'ai trouvé une solution pour me dépanner à partir de ce que nesbla m'a dit.

    Je laisse le post ouvert si quelqu'un connait une solution plus 'propre'.
    En fait je fais deux cas : 1 pour les nombres à un chiffre et 1 pour les nombres à deux chiffres. Après je classe est c'est bon.
    Voila la requete que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    SELECT u.login FROM user u WHERE u.login like '%test%' AND LENGTH(u.login) > LENGTH('test')+1 ORDER BY u.login DESC
     
     
    SELECT u.login FROM user u WHERE u.login like '%test%' AND LENGTH(u.login) = LENGTH('test')+1 ORDER BY u.login DESC
    Merci quand meme !

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT u.login 
    FROM user u 
    WHERE u.login like '%test%' 
    ORDER BY CAST(SUBSTRING(u.login, LENGTH('test')+1) AS INT) ASC
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre régulier
    Avatar de july
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 98
    Points
    98
    Par défaut
    Bonjour,

    Merci beaucoup pour la réponse qui semble bien !
    Cependant, j'obtiens une erreur...

    MySQL a répondu:
    #1064 - Erreur de syntaxe pr賠de 'INT) LIMIT 0, 30' ࠬa ligne 4

    J'utilise phpMyAdmin.

    Merci encore

  8. #8
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Je pense que c'est le INT que MySQL ne reconnait pas, essaye de le remplacer par BIGINT ou INTEGER, ou un type que MySQL connait et qui passe dans la fonction CAST.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  9. #9
    Membre régulier
    Avatar de july
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 98
    Points
    98
    Par défaut
    J'y ai pensé !
    J'ai essayé avec bigint (qui est reconnu par MySQL) et integer mais tjs la même erreur...

Discussions similaires

  1. Classer par ordre 2 champs
    Par gastoncs dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/02/2008, 16h30
  2. SSRS parametre à classer par ordre decroissant
    Par geof dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 03/12/2007, 11h00
  3. Fenêtre InputBox à classer par ordre de passage
    Par lg022 dans le forum Access
    Réponses: 5
    Dernier message: 14/02/2007, 16h37
  4. Comment classer par ordre chronologique
    Par pierrot67 dans le forum Bases de données
    Réponses: 2
    Dernier message: 27/11/2006, 22h04
  5. [VB6] Classer par ordre alphabétique
    Par boudincweole10 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 02/05/2006, 17h48

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