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 :

Requetes TOP/BOTTOM


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Requetes TOP/BOTTOM
    Bonjour,

    Est-il possible avec mySql de récuppérer uniquement une tranche (par exemple les 5 premier) d'une serie d'enregistrement trié suivant un critère.

    Ceci dans le but ne pas trop affecter les performance lorque l'no veut les 5 premier enregistrements d'une table de 1000 par exemple.

    Merci,

    Sylvain

  2. #2
    Membre habitué Avatar de Kimael
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 159
    Points
    159
    Par défaut
    LIMIT est ton ami !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Je sais pas

    Est fait LIMIT permet de ne prendre qu'un certain nombre de ligne en compte.

    Si j'ai une table avec
    Clé 1 2 3 4 5 6
    Val 2 6 3 1 9 0

    Est que je fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from table where Val > 3  limit 2 order by Val
    Je v obtenir seulement le premier couplue puisque je ne considérerais que les deux premier enregistrements.

    Ce que je souhaite est différent. Je veux qu'il prenne en compte toute la table, puis ne retourne ensuite que les deux premier enregristrement sur tous ceux trouver, dans le but d'avoir un résultat plus léger.
    Dans mon exemple je voudrais donc obtenir

    Clé 6 4
    Val 0 1

    J'espère que c plus clair

  4. #4
    Membre habitué Avatar de Kimael
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par bilbon.S
    Je v obtenir seulement le premier couplue
    Non, je ne pense pas
    Il me semble que limit réduit le nombre d'enregistrements retournés...

    Tu as un lien vers la doc qui tu fais croire que je me trompe ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    dans ton lien il est dit :
    Si vous utilisez LIMIT # avec la clause ORDER BY , MySQL va arrêter de trier dès qu'il a trouvé la première # au lieu de trier toute la table.
    Donc à mon avis la table n'est pas entièrement triée

    D'un autre côté la doc dit aussi

    La clause LIMIT peut être utilisée pour limiter le nombre d'enregistrements retournés par la commande SELECT
    La question est de savoir si LIMIT agis sur la table originale ou sur le résultat de la requête

  6. #6
    Membre habitué Avatar de Kimael
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par bilbon.S
    La question est de savoir si LIMIT agis sur la table originale ou sur le résultat de la requête
    A mon avis, ça peut dépendre d'où est placé ton LIMIT dans ta requête (même si c'est bizarre pour du SQL) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT t.champs2 FROM tata t LIMIT 2 ORDER BY t.champs1;
    peut ne pas renvoyer la même chose que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT t.champs2 FROM tata t ORDER BY t.champs1 LIMIT 2;
    Mais ce ne sont que des suppositions (tests obligatoires à mon avis ) !
    Par expérience, en utilisant le deuxième ordre, je n'ai AUCUN problème avec mes ORDER BY et mes LIMIT (ça renvoi les X premiers éléments triés).

    Par contre, c'est pas dit que ça accélère le traitement de la requête...
    Tu me tiens au courant ?!

  7. #7
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Bonjour,

    Citation Envoyé par bilbon.S
    dans ton lien il est dit :
    Si vous utilisez LIMIT # avec la clause ORDER BY , MySQL va arrêter de trier dès qu'il a trouvé la première # au lieu de trier toute la table.
    Donc à mon avis la table n'est pas entièrement triée
    Ca me parait assez abérrent, à ce moment-là ça voudrait dire qu'un
    Retournerait la même chose qu'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ... ORDER BY toto LIMIT 10


    Il faut bien voir qu'un tri nécessite un balayage complet de la table, si on "s'arrête de trier dès qu'on a trouvé la Xè ligne" ce n'est plus un tri puisque plein de valeurs n'ont pas été prises en compte...

    Citation Envoyé par Kimael
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT t.champs2 FROM tata t LIMIT 2 ORDER BY t.champs1;
    peut ne pas renvoyer la même chose que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT t.champs2 FROM tata t ORDER BY t.champs1 LIMIT 2;
    La première requête me renvoie une erreur, à mon avis le LIMIT doit être placé à la fin.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Bon donc j'ai testé et en effet LIMIT marche comme on est en droit de l'attendre

    Il trie en effet toute la table et ne renvois ensuite que les x premier resultat demandés.

    La doc n'est pas très limpide sur ce point je trouve, mais en tous cas ça semble marché (petit test rapide sur une table cle/val avec des entiers).

    Merci à tous

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

Discussions similaires

  1. [AC-2003] Requete TOP 3 Client par produit en fonction du volume
    Par Blondain dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 29/04/2009, 07h14
  2. Inversion top/bottom dans QRect
    Par Sve@r dans le forum PyQt
    Réponses: 2
    Dernier message: 09/08/2008, 18h19
  3. Optimisation d'une requete "TOP 5"
    Par gregb34 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 04/05/2006, 17h17
  4. [CSS / IE] Etirer un DIV à l'aide de Top Bottom Right Left ?
    Par DemonKN dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 20/08/2005, 10h03
  5. requete top 10, groupage etc ...
    Par killy-kun dans le forum Requêtes
    Réponses: 10
    Dernier message: 06/08/2005, 14h41

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