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

Requêtes MySQL Discussion :

Récupérer les 10 derniers enregistrements d'une table + 1 au hasard


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Récupérer les 10 derniers enregistrements d'une table + 1 au hasard
    Bonjour, bonsoir ;-)

    voilà, j'aimerais sélectionner dans une table ARTICLES les 10 derniers articles rentrés + 1 article au hasard déjà présent dans la table et qui ne soit pas un des 10 derniers.

    Est ce possible d'effectuer cette requête en 1 seule fois ?

    Comme ma question le laisse suggérer ;-), je débute et ai un peu de mal...

    Je reste donc bloqué à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *     
    FROM articles 
    ORDER BY added DESC 
    LIMIT 10";
    Pas de souci donc pour récupérer les 10 derniers articles. Mais je ne sais pas quoi rajouter dans la requête pour obtenir ce que je souhaite : 1 article en +, pris au hasard et qui ne fasse pas partie des 10...

    Quelqu'un peut m'aider ??

    merci beaucoup par avance,
    merci merci

    un pauv ti malheureux ;-)

  2. #2
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    je ne pense pas que cela soit faisable en une seule requête, sinon avec une union de deux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    (SELECT * 
    FROM articles 
    ORDER BY added DESC 
    LIMIT 10)
    union 
    (SELECT * 
    FROM articles 
    ORDER BY RAND() 
    LIMIT 1)

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Hello Nsanabi !!

    merci pour ton aide !! ça marche !!!

    Il y a "par contre" juste à préciser que le rand() ne doit pas faire partie des 10 déja sortis...

    et là ça sera nickel,
    mais c'est déja énorme là :-)
    merci encore !!

  4. #4
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    Citation Envoyé par jeanDD Voir le message
    Il y a "par contre" juste à préciser que le rand() ne doit pas faire partie des 10 déja sortis...
    je comprend pas
    si tu voulais deux jeux de résultats, fais deux requêtes et tu récupères le résultat de chacune séparément :
    cette fois sans l'union
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT * 
    FROM articles 
    ORDER BY added DESC 
    LIMIT 10;
    --et une autre requête séparée
    SELECT * 
    FROM articles 
    ORDER BY RAND() 
    LIMIT 1;

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Peut-être quelque chose comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT  * 
        FROM    articles 
        ORDER BY added DESC 
        LIMIT 10
    UNION 
        SELECT  * 
        FROM    articles
        WHERE   id_article NOT IN  
                (   SELECT  id_article 
                    FROM    articles 
                    ORDER BY added DESC 
                    LIMIT 10
                )
        ORDER BY RAND() 
        LIMIT 1
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Salut al1 !

    Ta solution est logique, mais se heurte aux restrictions de MySQL quant à l'utilisation de LIMIT dans un IN...

    Je propose la solution suivante, hélas en deux étapes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    CREATE TEMPORARY TABLE tmp 
    SELECT  id_article 
        FROM    articles 
        ORDER BY added DESC 
        LIMIT 10
    ;
    (SELECT *
        FROM    articles 
        ORDER BY added DESC 
        LIMIT 10
    )
    UNION ALL
    (SELECT  * 
        FROM  articles
        WHERE id_article NOT IN (SELECT id_article FROM tmp)
        ORDER BY RAND() 
        LIMIT 1
    ) ;
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

Discussions similaires

  1. [AC-2003] Afficher les 100 derniers enregistrements d'une table
    Par Evolvana dans le forum VBA Access
    Réponses: 3
    Dernier message: 03/08/2011, 15h47
  2. Comment récupérer les 2 derniers enregistrements d'une table?
    Par js8bleu dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 07/11/2009, 19h21
  3. récupérer le dernier enregistrement d'une table
    Par kuhnden dans le forum Access
    Réponses: 4
    Dernier message: 21/02/2007, 21h47
  4. comment rechercher les derniers enregistrement d'une table ?
    Par hornetboy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/09/2005, 09h13
  5. Récupérer dernier enregistrement d'une table?
    Par Invité dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 19/01/2004, 11h38

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