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 :

Requête pour récupérer les 5 derniers enregistrement dans l'ordre croissant


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 277
    Points : 93
    Points
    93
    Par défaut Requête pour récupérer les 5 derniers enregistrement dans l'ordre croissant
    Bonjour à tous,

    Tout est dans le titre. Je voudrais récupérer les 5 derniers enregistrements d'une table dans l'ordre croissant.

    Partons de cette table =>ID 1 2 3 4 5 6 7 8 9 10

    Je voudrais donc pouvoir afficher ceci => 6 7 8 9 10

    Mais je ne vois pas quelle requête utiliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id
    FROM TABLE
    ORDER BY id ASC
    LIMIT 5
    va me donner => 1 2 3 4 5

    Donc dans cette situation, on a bien l'ordre croissant mais pas les 5 derniers enregistrement.

    Et si je fais :
    Code : SQL - Afficher / masquer les numéros de ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT id
    FROM TABLE
    ORDER BY id DESC
    LIMIT 5
    je vais avoir ceci => 10 9 8 7 6

    Donc les 5 derniers enregistrements mais dans l'ordre décroissant.

    Comment faire?

  2. #2
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    salut
    je ne sais pas en mysql si c'est possible.
    Sinon tu fais ta requête en utilisant DESC et tu utilises array_reverse...
    http://no.php.net/manual/fr/function.array-reverse.php
    c'est de la bidouille mais bon...

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 277
    Points : 93
    Points
    93
    Par défaut
    J'ai essayé de cette facon mais sans succés:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while($row = array_reverse (mysql_fetch_assoc($requete)))
    {
     
    }
    Cela me renvoie l'erreur suivante :

    array_reverse(): The argument should be an array

  4. #4
    Membre averti Avatar de makmaoui
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 283
    Points : 368
    Points
    368
    Par défaut
    Salut,

    tu peux aussi le faire en 2 requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    <?php
     
    $sqlNb = mysql_query('SELECT count(*) as nb FROM table');
     
    $nb = mysql_result($sqlNb , 0 , 'nb') - 5;
     
    $selection = mysql_query('SELECT id FROM table ORDER BY id ASC LIMIT '.$nb.' , 5');
     
    ?>

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Voici une requête qui fait ce que tu veux, dans la mesure où ta version de MySQL supporte les sous-requêtes (au moins version 4.1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT id FROM `table` t1
    WHERE (SELECT COUNT(*)
           FROM `table` t2
           WHERE t1.id < t2.id) < 5
    ORDER BY id ASC
    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 277
    Points : 93
    Points
    93
    Par défaut
    J'avais également pensé à une sour requête mais la question que je me pose est:
    Est ce que l'utilisation de sous requête augmente les ressources nécessaires à l'execution de celle-ci?

    La requête en elle-même n'est pas très importante mais elle sera executée des centaines de fois par minutes donc j'essaie de l'optimiser un maximum.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 194
    Points : 216
    Points
    216
    Par défaut
    Citation Envoyé par Jonathan.b Voir le message
    J'ai essayé de cette facon mais sans succés:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while($row = array_reverse (mysql_fetch_assoc($requete)))
    {
     
    }
    Cela me renvoie l'erreur suivante :

    array_reverse(): The argument should be an array
    je me demande si l'inversion d'array marche avec les tableaux associatifs...
    de toute façon tu ne cherches pas à inverser le bon tableau
    là tu essayes d'inverser l'ordre du tableau associatif contenant 1 enregistrement...

    alors qu'il faut le faire sur le tableau contenant des 5 enregistrements.... (je ne sais pas si on peut l'obtenir comme ça... à partir de $requete ??...)

    sinon version bidouillage pour obtenir le tableau ça donnerait plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while($row = (mysql_fetch_assoc($requete)))
    {
       $tableau[]=$row;
    }
     
    $bon_tableau=array_reverse($tableau);
    et hop après tu prends 1 par 1 les éléments de $bon_tableau et ça devrait aller

    par contre qu'est qui est plus rapide? sous-requête ou manipulations en php?
    Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait.
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.


    Spidercochon, spidercochon, il peut marcher au plafond
    ...MM ......Voici Spidercochon. Aidez le à conquérir le monde
    E(....)~....en le reproduisant.
    ...w

Discussions similaires

  1. [MySQL] Requête pour récupérer les informations d'un membre
    Par webamies dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 09/05/2009, 20h10
  2. récupérer les 3 derniers enregistrements
    Par COLOMBAT dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 28/09/2007, 11h10
  3. [Interbase] Récupérer les N derniers enregistrements
    Par mameziane dans le forum InterBase
    Réponses: 5
    Dernier message: 05/09/2007, 00h50
  4. Requête pour obtenir les numéros d'enregistrements
    Par The_Super_Steph dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 16/05/2007, 08h39
  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, 16h13

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