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 :

Requête de tri sur les 20 derniers enregistrements


Sujet :

Langage SQL

  1. #1
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut Requête de tri sur les 20 derniers enregistrements
    Bonjour,

    Voilà j'ai une table X comportant 100 enregistrements.
    Je souhaiterai appeler les 20 derniers enregistrements (dates au format anglais) et faire un tri DESC avec B sur ceux-ci.
    C'est pour une base MYSQL.

    A B C D

    1 1 1 1
    2 2 2 2
    3 3 3 3
    4 4 4 4
    5 5 5 5
    ...

    J'arrive pas...

    Merci

  2. #2
    Membre averti Avatar de jmulans
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 397
    Points : 383
    Points
    383
    Par défaut
    essaye un truc du style SELECT * FROM taTable LIMIT 0,20 ORDER BY tonChamp DESC

    par contre je ne suis pas sur si ça va te renvoyer les 20 premier ou les 20 dernier, essaye...

  3. #3
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut
    Nop ca ne marche pas, pour deux raisons.
    - Le "LIMIT 0,20" doit être placé en fin de requête (j'ai un message d'erreur).
    - Et en le plaçant en fin de requête, si je fais un tri ASC, puis DESC sur B, il ne récupère pas effectivement les 20 derniers enregistrements (de A), mais les 20 derniers enregistrements de B...

  4. #4
    Membre averti Avatar de jmulans
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 397
    Points : 383
    Points
    383
    Par défaut
    je ne comprend pas ton histoire de A et B
    c'est quoi exactement la structure de ta table ?

  5. #5
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut
    En fait A, B sont les noms des champs (voir le semblant de tableau que j'ai fait dans le premier message...)

  6. #6
    Membre averti Avatar de jmulans
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 397
    Points : 383
    Points
    383
    Par défaut
    ah ok

    en fait tu veut recuperer A classé selon B ?
    ça devrai marcher comme ça je pense
    SELECT A FROM taTable ORDER BY B DESC LIMIT 0,20

  7. #7
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut
    Nop comme je le disais un peu plus haut, cette requête fait un tri de B sur l'ensemble de la table et récupère 20 enregistrements.
    Ce que je veux c'est récupérer les 20 derniers enregistrements de A et faire dessus un tri par B...

  8. #8
    Membre averti Avatar de jmulans
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 397
    Points : 383
    Points
    383
    Par défaut
    bah a ce moment là tu peut faire 2 requete à suivre
    ou une requete imbriquée plutot
    d'abord tu recupere les 20 derniers enregistrement de A, ensuite tu fait un tri selon B

    je ne sais plus bien comment ça fonctionne les requetes imbriquée alors je veut pas t'induire en erreur
    va voir ici http://langagesql.free.fr/chap3d8.htm

  9. #9
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut
    Je vais étudier ça merci.

  10. #10
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    j'aurais essayé quelque chose comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * FROM `table` WHERE A IN
    (
        SELECT A FROM `table` ORDER BY A DESC LIMIT 20
    )
    ORDER BY B ASC
    This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

    Mais j'ai un message d'erreur me disant que ma version n'est pas assez récente que pour accepter le LIMIT dans ma sous requête. Peut être que la tienne l'est d'avantage.


    Jasmine,

  11. #11
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut
    Merci Jasmine c'est un bon début de réponse, mais j'ai une version récente de MYSQl et j'ai le même message d'erreur...

  12. #12
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Et tout simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * 
    FROM `table` 
    ORDER BY 'A' DESC, `B` DESC
    LIMIT 20
    Ca donne ce que tu aimerais non?


    Jasmine,

  13. #13
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut
    Nop car tous mes enregistrements de A sont différents. Cette requête fonctionne avec des enregistrements de A identiques. J'ai déjà essayé, les enregistrements de B ne se classent pas...

  14. #14
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut
    Bon je vais essayer sur le forum php / mysql, j'aurai peut être plus de chance...
    Merci.

  15. #15
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 117
    Points : 28 496
    Points
    28 496
    Par défaut
    Si tu avias un SGBD qui prend en charge les fonctions d'analyse (ANSI:99), ça pourrait se faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select  *
    from    MATABLE
    where   rownumber() over(order by A desc) <= 20
    order by B desc
    ;

  16. #16
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut
    Bonjour,

    J'ai trouvé ma solution sur l'autre forum, merci.

    C'est par ici !

  17. #17
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 117
    Points : 28 496
    Points
    28 496
    Par défaut
    LIMIT n'étant pas un élément normalisé du langage SQL, j'évite de l'utiliser dans le forum Langage SQL.
    D'autant plus que le SGBD sur lequel je travaille ne le reconnaît pas

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

Discussions similaires

  1. [10g] Une requête sur les 4 derniers enregistrements
    Par ivoratparis dans le forum SQL
    Réponses: 2
    Dernier message: 07/08/2014, 01h14
  2. Requêtes sur les trois derniers évènements
    Par kudore dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/02/2009, 12h11
  3. [MySQL] Requête pour récupérer les 5 derniers enregistrement dans l'ordre croissant
    Par Jonathan.b dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/01/2008, 10h50
  4. [MySQL] Requête de tri sur les 20 derniers enregistrements
    Par kryogen dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/04/2007, 11h26
  5. créer une requête qui selectionne les 10 derniers enregistrements
    Par kuhnden dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 12/04/2007, 17h13

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