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 :

comment connaitre le nombre ...


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 24
    Points
    24
    Par défaut comment connaitre le nombre ...
    Salut,
    j'ai un petit script pour gere mes news... Ils sont dans une MySQL pis je les fais s'afficher 5 par 5.
    Je cherche a recuperer le nombre total de ligne de ma table et non seulement le nombre de lignes requested...
    J'arrive a limiter mon afichage dans un sens... mais pas dans l'autre...

    Voici mon code:
    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
    22
    23
    24
    25
    26
    27
    28
     
    ...
        $request = "SELECT * FROM news ORDER BY date DESC LIMIT $StartRows,$NextRows";
     
        if($result = mysql_query($request)) {
          $num=mysql_num_rows($result);
     
    //////// C'est la dedans mon probleme... ////// 
          if ($num=$NextRows) {
            $NextStartRows=$StartRows+$NextRows;
           if ($num="") {
              echo "You have just seens the oldest news.<BR></a>";
            } else {
              echo "<a href=\"news.php?StartRows=$NextStartRows\">See the next $NextRows news.<BR></a>";
            }
     //////// C'est la dedans mon probleme... //////
     
          }
          if (($StartRows-$NextRows)<0) {
            $NextRows=$NextRows-$StartRows;
            if ($StartRows<>0) {
              echo "<a href=\"news.php?StartRows=0\">See the previous $NextRows news.<BR></a>";
            }
          } else {
            $PrevStartRows=$StartRows-$NextRows;
            echo "<a href=\"news.php?StartRows=$PrevStartRows\">See the previous $NextRows news.<BR></a>";
          }
    ...
    qq'un a une idee???

    Merci
    Ludo

  2. #2
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    Tu dois modifier ta requête SQL pour ramener dedans le nombre de lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request = "SELECT news.*, B.TOTAL FROM news, (SELECT COUNT(*) TOTAL FROM news) B ORDER BY date DESC LIMIT $StartRows,$NextRows";
    Attention, il est important de mettre 'news.*' et non pas juste '*' car sinon ça ne passera pas.

    Ensuite tu n'as plus qu'à comparer la position du dernier élément trouvé ($StartRows+$NextRows) avec le nombre de lignes de la table (B.TOTAL) pour savoir si tu as encore des éléments à afficher.

    Je n'ai pas MySQL sous la main donc je ne peux pas te certifier que ma solution marche... mais en tout cas ça marche parfaitement en DB2.
    www.ferraridefrance.com - www.autoccaz.com
    DELPHI 4-5-6-7, PHP 4, VB 4-5-6, J2EE, ADA, C++, SIEBEL 7, COBOL... DB2 OS/390, Access...

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    hmm...
    je suis pas sur de comprendre tout le code mais bon

    mais la je fais comment pour avoir le nombre de ligne de B.TOTAL ??

  4. #4
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Points : 43
    Points
    43
    Par défaut
    De la même façon que tu lis les données de ton 'SELECT *' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    request = "SELECT news.*, B.TOTAL FROM news, (SELECT COUNT(*) TOTAL FROM news) B ORDER BY date DESC LIMIT $StartRows,$NextRows";  
     
    $result = mysql_query($request));
    $row = mysql_fetch_row($result);
    Il ne te reste plus qu'à exploiter $row en y indiquant la position (ci-dessous XXX) de 'B.TOTAL' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Print 'Il y a '.$row[XXX].' lignes dans la table';
    Par contre, ce que je ne comprend pas, c'est que tu avais fais un 'SELECT *' mais je ne vois où tu l'exploites (plus loin dans ton code peut-être ).
    www.ferraridefrance.com - www.autoccaz.com
    DELPHI 4-5-6-7, PHP 4, VB 4-5-6, J2EE, ADA, C++, SIEBEL 7, COBOL... DB2 OS/390, Access...

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    ok,
    donc c qu'il a un un probleme avec le request...
    J'ai une erreur de connexion a la DB.

    Cette partie la je cpate pas du tout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    news.*, B.TOTAL FROM news, (SELECT COUNT(*) TOTAL FROM news) B

  6. #6
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Points : 43
    Points
    43
    Par défaut
    Comme je t'ai dis, je n'ai pas pu tester la requête car je n'ai pas MySQL sous la main... Peut-être que MySQL interprête '(SELECT COUNT(*) TOTAL FROM news) B' comme une sous-requête... et comme la version actuelle ne gère pas les sous-requêtes...

    En ce qui concerne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT news.*, B.TOTAL FROM news, (SELECT COUNT(*) TOTAL FROM news) B
    C'est simple : je demande toutes les données de la table news (news.*), ainsi que son nombre de lignes ((SELECT COUNT(*) TOTAL FROM news) B). C'est vrai pour la 2ème partie, seuls les pros du SQL l'utilisent (en toute modestie... ) mais au cas où tu ne le saurais pas : en SQL, dans la clause FROM, il n'y a pas que les tables; il y a aussi des ensemble de données que tu peux toi même générer par une autre requête.

    Dans mon cas, j'ai simplement fais une requête pour rapporter le nombre de lignes (SELECT COUNT(*) TOTAL FROM news) et je met (obligatoire) un ALIAS pour nommer mon ensemble de données (ici appelé B). C'est en quelque sorte comme si j'avais créé une table.

    PS : si personne ne trouve d'ici ce soir, je ferai les tests chez moi car je ne peux rien faire où je suis.
    www.ferraridefrance.com - www.autoccaz.com
    DELPHI 4-5-6-7, PHP 4, VB 4-5-6, J2EE, ADA, C++, SIEBEL 7, COBOL... DB2 OS/390, Access...

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    Je te remercie d'avance

    Et pour les explications, c'est ce que j'avais cru comprendre mais j'avoue que n'ayant jamais vu ca nul par... ca me semblait du chinois
    Au moins, j'ai appri un truc interessant today!

    mici
    Ludo

  8. #8
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Points : 43
    Points
    43
    Par défaut
    Après plusieurs essais, il s'avère effectivement que MySQL ne peut pas encore tout faire comme en DB2 et notamment les sous-ensembles de données (SELECT news.*, B.TOTAL FROM news, (SELECT COUNT(*) TOTAL FROM news) B). Je pense que ça viendra un jour...

    Pour répondre malgré tout à ton problème, il y a de toute façon plusieurs autres solutions :

    1 - Avant tout ton code, tu fais toi-même une requête qui compte le nombre d'éléments de ta table des news, nombre d'éléments que tu peux ensuite exploiter. Ca te fera faire une requête de plus mais c'est encore le plus simple et le plus rapide.

    2 - Ta requête restitue 6 éléments mais tu n'en affiches que 5 (... LIMIT x, 6). De cette façon, tant que ta requête ramène 6 éléments, c'est qu'il y a encore au moins une page de news à afficher quand l'utilisateur demande la page suivante.

    3 - Tu fais un menu du style "1 2 3 4 5 6 ...", un peu comme sur ce forum, pour permettre à l'utilisateur de choisir la page de son choix. Là, pas de problème puisque la page demandée existera forcément donc il n'y a pas de risque qu'il demande une page et que ta requête ne trouve rien. Pour générer ce menu, tu dois simplement faire une boucle FOR qui va de 1 à ((NBELEMS - 1)/5)+1, où NBELEMS est le nombre d'éléments de ta table.

    J'espère avoir pu t'aider...
    www.ferraridefrance.com - www.autoccaz.com
    DELPHI 4-5-6-7, PHP 4, VB 4-5-6, J2EE, ADA, C++, SIEBEL 7, COBOL... DB2 OS/390, Access...

  9. #9
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Les sous requêtes fonctionne seulement a partir de MySQL version 4.1

    pour ta question tu peut utiliser la fonction "FOUND_ROWS" mais elle est seulement disponible a partir de la version 4.0
    plus d'info ici : http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html (fait une recherche de "FOUND_ROWS" sur cette page parce qu'elle contient tout le chapitre 6 du manuel)

    si tu as une version < 4.0 il ne te reste plus qu'a utiliser un "SELECT COUNT(*) ..."

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    thxs tlm,

    Je vais essayer de trouver une solution est des que j'aurais reussis je poste, un [resolu]

    Ludo

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/05/2007, 10h37
  2. Réponses: 31
    Dernier message: 30/09/2006, 22h08
  3. Réponses: 2
    Dernier message: 13/06/2006, 15h46
  4. comment connaitre le nombre de <tr> au sein d'un <table>
    Par pit9.76 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/06/2006, 13h27
  5. Réponses: 2
    Dernier message: 05/05/2006, 08h55

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