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 :

limit et nombre de lignes


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 48
    Par défaut limit et nombre de lignes
    Bonjour,

    je voudrais savoir si on peut connaitre le nom de ligne qu'un select pourrait prendre même si on a un limit.

    Par exemple sur une table avec 10 entrées. Si on lance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table limit 0,5
    Y a t'il un moyen de connaitre le nombre d'entrée (10 dans ce cas) sans avoir à refaire une requête ?

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 944
    Par défaut
    La table INFORMATION_SCHEMA.TABLES permet de connaitre ce nombre.

    Mais, il n'est "valable" que pour un select sans condition, et exige de toute façon de requêter sur cette table.
    Alors, autant faire un count

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 48
    Par défaut
    ok alors je ferais un count en php tout bête :p

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 50
    Par défaut
    Citation Envoyé par qi130 Voir le message
    La table INFORMATION_SCHEMA.TABLES permet de connaitre ce nombre.

    Mais, il n'est "valable" que pour un select sans condition, et exige de toute façon de requêter sur cette table.
    Alors, autant faire un count
    Mauvaise réponse !!!

    La doc MySQL:
    mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
    -> WHERE id > 100 LIMIT 10;
    mysql> SELECT FOUND_ROWS();

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 48
    Par défaut
    pour le count en php c etait bete j avais oublie le limit :p

    y a un moyen de s assurer que personne ne fait de select entre le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
    -> WHERE id > 100 LIMIT 10;
    et le
    ou alors faudrait que je bloque la table en lecture Vous en pensez quoi ?

    Je crois pas, en plus ca a pas l air de marcher chez moi :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT SQL_CALC_FOUND_ROWS * 
    FROM pomelodev_joboffer
    WHERE JO_id >100
    LIMIT 0 , 30
    donne Zeige Datensätze 0 - 29 (251 insgesamt, die Abfrage dauerte 0.0040 sek)

    soit 251 résultat en tout et
    donne
    FOUND_ROWS()
    126

    je fais une erreur quelque part ?

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Pour avoir le nombre de lignes de la table, il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT(*)
    FROM pomelodev_joboffer
    Mais effectivement, si entre cette requête et le SELECT sur un nombre plus restreint de lignes il y a un INSERT par un autre utilisateur, le résultat de la première requête sera faux.

    2 solutions :
    1) Bloquer la modification de la table, le temps de faire les deux requêtes.
    2) Si la table ne contiendra jamais un trop grand nombre de lignes, rappatrier toutes les lignes de la table (SELECT sans LIMIT) pui sn'afficher que le nombre de lignes voulues par une boucle en PHP.

    Sinon si le nombre de lignes de la table n'a pour vous qu'une valeur indicative et n'a pas besoin d'être précise, lancez les deux requêtes à la suite sans blocage de la table. Le cas ou des INSERT viendraient modifier ce nombre sera peut-être rare et ne changera pas de manière conséquente l'information voulue.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 50
    Par défaut
    Hello,
    suite aux résultats étranges obtenus (126 avec FOUND_ROWS au lieu de 251), j'ai testé chez moi... et j'ai 127 au lieu de 907 en passant par phpMyAdmin. Probablement que phpMyAdmin fait une autre requête avec SQL_CALC_FOUND_ROWS et que c'est ce résultat que nous voyons. En refaisant le test directement dans un script PHP, ça marche sans problèmes.

    D'autre part le résultat du SELECT FOUND_ROWS n'est pas influencé par les INSERT/REPLACE/DELETE/... qui ont été faits depuis le SQL_CALC_FOUND_ROWS, il n'y a pas besoin de poser un verrou. Si je comprends bien, la deuxième requête ne fait que récupérer un résultat calculé lors de la première requête.

    Tests avec une table de 907 enregistrements.
    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
    19
    20
    21
     
    SELECT * FROM test
    => 907
     
    SELECT SQL_CALC_FOUND_ROWS * FROM test LIMIT 10,20
    => 20
     
    SELECT FOUND_ROWS() AS nombre
    => 907
     
    SELECT SQL_CALC_FOUND_ROWS * FROM test LIMIT 10,20
    => 20
     
    DELETE FROM test WHERE id<20
    => 19
     
    SELECT FOUND_ROWS() AS nombre
    => 907 (: c'est le total AVANT le DELETE !)
     
    SELECT * FROM test
    => 888

  8. #8
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 944
    Par défaut
    Citation Envoyé par mrcmrc Voir le message
    Mauvaise réponse !!!
    Mais non, cette réponse est parfaitement valable eu égard à la question posée.

    Il s'avère qu'une autre possibilité existe avec SQL_CALC_FOUND_ROWS, mais avec les "aléas" constatés par les essais rapportés.

Discussions similaires

  1. Limiter le nombre de lignes retournées
    Par Takusen dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/11/2006, 23h58
  2. Limiter le nombre des lignes en résultat
    Par Grand sorcier dans le forum Oracle
    Réponses: 1
    Dernier message: 11/07/2006, 14h30
  3. Limiter un nombre de lignes
    Par Trunks dans le forum Access
    Réponses: 5
    Dernier message: 25/01/2006, 13h29
  4. [C#] Limité le nombre de lignes dans une DataView ...
    Par maitrebn dans le forum Accès aux données
    Réponses: 5
    Dernier message: 07/11/2005, 23h57
  5. Limiter le nombre de Ligne d'un RichEdit
    Par Argonz dans le forum C++Builder
    Réponses: 2
    Dernier message: 06/07/2004, 10h16

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