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 :

Problème avec ORDER BY et LIMIT


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Problème avec ORDER BY et LIMIT
    Bonjour à tous,

    Voici mon exemple avec la table_lettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      id   lettre
      ---  --------
      1    A
      2    B
      3    C
      4    D
      5    E
    Mes requètes et résultats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    . Requete 1 :
    SELECT lettre FROM table_lettre ORDER BY lettre ASC LIMIT 0,3
    
    . Résultat 1 :
      id   lettre
      ---  --------
      1    A
      2    B
      3    C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    . Requete 2 :
    SELECT lettre FROM table_lettre ORDER BY lettre DESC LIMIT 0,3
    
    . Résultat 2 :
      id   lettre
      ---  --------
      1    E
      2    D
      3    C
    Cependant je voudrais à mon résultat 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    . Résultat 2 :
      id   lettre
      ---  --------
      1    C
      2    B
      3    A
    Est-ce que quelqu'un pourrait me donner la solution ou des idées à ce problème ?
    Je vous remercie d'avance.

  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
    je propose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id,lettre from table_lettre having id < 4 order by lettre desc  limit 3

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Salut,
    merci de ta proposition et je ne doute pas qu'elle fonctionne.
    Admettons maintenant que j'ai la table suivante (en effet j'ai plus cette similitude dans la vraie table où je travaille) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      id   lettre
      ---  --------
      1    A
      3    B
      7    C
      9    D
      15   E
    Donc comme résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      id   lettre
      ---  --------
      7    C
      3    B
      1    A
    Une autre idée peut-être ?

  4. #4
    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
    Je dirais qu'il faut classer dans l'ordre ascendant puis inverser par la langage de programmation.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Ce que tu veux dire c'est que je fais ma requête mysql en ordre ascendant et dans mon script PHP je fais l'inversion ? Genre j'insère mes résultats de requêtes dans un tableau puis je tri ces résultats dans l'ordre inverse.
    Si c'est le cas, j'y ai un peu pensé aussi mais c'est tout l'espace web que je développe que je vais tout repasser à cause d'un petit tri :/.
    Il n'y aurait donc pas de requête mysql possible pour ce genre de tri... ?

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Je viens de trouver la solution pour la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ( SELECT lettre FROM table_lettre LIMIT 0,3 ) ORDER BY lettre DESC
    Avec un peu de logique on peut comprendre que la requête exécute tout d'abord le code entre parenthèse, c'est-à-dire la sélection des 3 premières entrées, puis fait un ordre descendant de ces 3 entrées.
    Tandis que la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT lettre FROM table_lettre ORDER BY lettre DESC LIMIT 0,3
    exécute l'ordre descendant de toutes les entrées puis effectue la sélection des 3 premières entrées.

    . Explication schéma en étape (selon ce que je crois comprendre ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    id   lettre
    ---  --------
    1    A
    3    B
    7    C
    9    D
    15   E
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Requête A :
    ( SELECT lettre FROM table_lettre LIMIT 0,3 ) ORDER BY lettre DESC
    
    Etape A1 :             Etape A2 :
    id   lettre            id   lettre
    ---  --------          ---  --------
    1    A                 7    C
    3    B                 3    B
    7    C                 1    A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Requête B :
    SELECT lettre FROM table_lettre ORDER BY lettre DESC LIMIT 0,3
    
    Etape B1 :            Etape B2 :
    id   lettre           id   lettre
    ---  --------         ---  --------
    15   E                15   E
    9    D                9    D
    7    C                7    C
    3    B
    1    A

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

Discussions similaires

  1. [HSQLDB] problème avec un SELECT utilisant LIMIT
    Par don_quichotte dans le forum Autres SGBD
    Réponses: 5
    Dernier message: 12/04/2007, 23h08
  2. [Requête]Problème avec ORDER BY NZ
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/11/2006, 20h27
  3. [MySQL] problème avec ORDER BY _ DESC avec des flottants
    Par Hayabusa dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/08/2006, 00h00
  4. problème avec une requete utilisant LIMIT
    Par kow_Ced dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/08/2006, 16h01
  5. problème avec order by et union
    Par ghostdog dans le forum Langage SQL
    Réponses: 8
    Dernier message: 23/05/2006, 09h54

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