fonction COUNT(*)

fonction COUNT(*) - PHP - Programmation

Marsh Posté le 26-05-2004 à 23:18:48    

Bonsoir,
 
Comment faire pour conditionner la fonction COUNT(*) dans une requete SQL.
En fait je veux compter les lignes d'une table mais simplement les lignes qui ont par exemple telle couleur.
 
Ce qui suit ne marche pas et je ne comprends pas pkoi???
$query = 'SELECT Count(*) FROM tableproduit WHERE couleur="bleu"';
 
Merci

Reply

Marsh Posté le 26-05-2004 à 23:18:48   

Reply

Marsh Posté le 26-05-2004 à 23:27:16    

je ferais

Code :
  1. select count(*) from tableproduit where couleur = 'bleu' group by couleur

Reply

Marsh Posté le 26-05-2004 à 23:30:25    

et si la condition est une variable $truc???

Reply

Marsh Posté le 26-05-2004 à 23:41:31    

Sincèrement, ta première requête devrait déjà fonctionner très bien sans la faute de syntaxe de la condition :D

Reply

Marsh Posté le 26-05-2004 à 23:49:37    

En fait j'ai deux tables :
une table "produit", et une "famille de produit" et je veux qu'apres avoir sélectionné une famille de produit (en cliquant sur un href) n'apparaissent que les produits de la famille sélectionnée. Mais bon sans aller jusque là, c vrai ke je peux faire la condition sur la table Produit et ca ne marche pas... Comprends pas

Reply

Marsh Posté le 26-05-2004 à 23:54:25    

Ben déjà, remplace les " par des ' dans la condition.
 
Ensuite, quel est le message d'erreur retourné s'il y en a un ?

Reply

Marsh Posté le 27-05-2004 à 00:00:26    

ouais en fait ca marche mais c plus compliqué que cela car je demande que les resultats s'affichent sur plusieurs pages avec un systeme de liens et là dur dur : voici le code :
 
<?php
    require('navig.php');
    $host = "localhost";
    $user = "root";
    $pass = "";
    $bdd  = "basetest";
    mysql_connect($host,$user,$pass) or die("Can't connect to server" );
    mysql_select_db($bdd) or die ("Can't connect to database" );
?>
    <table width="100%" border=0>
      <tr vAlign=top>
        <td>
      <table>
<?php
    // La variable "limite" fixe le nombre maximum d'éléments affichés par page
    $limite = 5;
    // La variable "debut" permet de déterminer le point de départ de l'affichage des enregistrements
    if (empty($debut)) $debut=0;
 
    // Recuperation nombre de lignes
    $query = 'SELECT Count(*) FROM tabletest';
    $numresultat = mysql_query($query);
    $numrow = mysql_fetch_row($numresultat);
    $nblignes = $numrow[0];
 
    if ($nblignes > 0) {
        // Recuperation liste des enregistrements
        $query = "SELECT * FROM tabletest where email='lskywalker@toto.com'  group by email";
        $query .= " ORDER BY nom";
        $query .= " LIMIT $debut,$limite";
        $resultats = mysql_query($query);
 
        // Boucle sur les enregistrements pour leur affichage
        while($row = mysql_fetch_array($resultats)) {
?>
        <tr>
          <td><font face=Arial color=#000080 size=2>
            <?php print "$row[nom]"; ?>
            </font></td>
          <td><font face=Arial color=#000080 size=2>
            <?php print "$row[email]"; ?>
            </font></td>
        </tr>
        <?php
        echo "\n";
        }
?>
      </table>
          </td>  
        </tr>
<?php
        // Affichage du navigateur  
        navigateur($nblignes,$debut,$limite);
        mysql_free_result($resultats);
?>
      </table>
<?php
    } else print("Aucun enregistrement, désolé !\n" );
?>
 
Et là par exemple j'ai 14 enregistrement dans la table, il me sort le bon enregistrement mais par contre il me rajoute 2 autres pages dans lesquelles il n'y a rien....

Reply

Marsh Posté le 27-05-2004 à 00:09:15    

Ben à première vue, la requête qui compte le nombre d'enregistrement total et celle qui les affiche n'étant pas la même c'est un peu normal qu'il y ait un os :)

Reply

Marsh Posté le 27-05-2004 à 09:37:35    

Je suis embêté aussi sur un COUNT, et je n'arrive pas à identifier le problème, c'est assez fou.
 
En fait je génère ma requête sans problème, je la  teste dans phpmyadmin et j'ai le résultat que je veux.
 
Seulement à l'éxecution dans ma page php, ça plante sans message d'erreur (interrompt l'éxecution de la page quoi)
 
Vlà le code

Code :
  1. [...]
  2. $query_compte = "SELECT COUNT (*) FROM `historique` WHERE `id_ca` LIKE '".$row_ca['id_ca']."' AND `etat` = '3'";
  3. echo $query_compte; // Utilisé pour mes tests
  4. $compte = mysql_query($query_compte, $dbconnect) or die(mysql_error()); // a priori c'est là que ça marche pas...
  5. $row_compte = mysql_fetch_array($compte);
  6. [...]


en plus dans cette page j'ai déjà fait plusieurs requêtes avant sans problème, le code est similaire...
 
Si ça se trouve c'est un truc gros comme le nez au milieu de la figure. moi je comprends plus ce qui se passe, pas de message d'erreur par dessus le marché :(

Reply

Marsh Posté le 27-05-2004 à 10:03:16    

je me réponds à moi même :  
Si je remplace COUNT(*) par * simplement,
et que je fais un mysql_num_rows j'obtiens le résultat que je souhaite.
 
Donc je comprends pas pourquoi le COUNT marche pas avec php... :/

Reply

Marsh Posté le 27-05-2004 à 10:03:16   

Reply

Marsh Posté le 27-05-2004 à 11:00:01    

peus tu me donner un coup de main par rapport a mon code car comme tu l'as vu il y a deux requetes, une qui compte le nbre de lignes et une qui affiche les resultats???
Et zi arrive pas.... beuuu

Reply

Marsh Posté le 27-05-2004 à 11:05:33    

Code :
  1. $query = 'SELECT Count(*) FROM tabletest';


 
remplace par :
 

Code :
  1. $query = 'SELECT * FROM tabletest';


 
et remplace la suite :

Code :
  1. $numrow = mysql_num_rows($numresultat);
  2.    if ($numrow > 0) {


 
La solution COUNT en SQL j'ai laissé tombé, je te propose la méthode que j'ai utilisé et qui marche chez moi...


Message édité par PunkRod le 27-05-2004 à 11:06:03
Reply

Marsh Posté le 27-05-2004 à 11:13:05    

vais essayer

Reply

Marsh Posté le 27-05-2004 à 11:23:03    

marche pas c embetant
 
Fatal error: Call to undefined function: mysql_num_row() in c:\program files\easyphp\www\basetest\exemple.php on line 23
   

Reply

Marsh Posté le 27-05-2004 à 11:23:58    

mysql_num_rowS
 
faut le S

Reply

Marsh Posté le 27-05-2004 à 11:55:39    

marche pas, il n'arrive pas a compter le nombre de lignes et me sortir en conséquence le nombre d'enregistrements, sais plus koi faire

Reply

Marsh Posté le 27-05-2004 à 11:57:55    

Remet voir ton code modifié, et à quel endroit le code cesse de marcher

Reply

Marsh Posté le 27-05-2004 à 12:06:14    

CA C'EST LECODE QUI RECHERCHE LES ENREGISTREMENTS
 

<?php
    require('navig.php');
    $host = "localhost";
    $user = "root";
    $pass = "";
    $bdd  = "basetest";
    mysql_connect($host,$user,$pass) or die("Can't connect to server" );
    mysql_select_db($bdd) or die ("Can't connect to database" );
?>
    <table width="100%" border=0>
      <tr vAlign=top>
        <td>
      <table>
<?php
    // La variable "limite" fixe le nombre maximum d'éléments affichés par page
    $limite = 5;
    // La variable "debut" permet de déterminer le point de départ de l'affichage des enregistrements
    if (empty($debut)) $debut=0;
 
    // Recuperation nombre de lignes
    $query = "SELECT * FROM tabletest";
    $numresultat = mysql_query($query);
    $numrow = mysql_num_rows($numresultat);
    $nblignes = $numrow[0];
 
 
    if ($nblignes > 0) {
        // Recuperation liste des enregistrements
        $query = "SELECT * FROM tabletest";
        $query .= " ORDER BY email";
        $query .= " LIMIT $debut,$limite";
        $resultats = mysql_query($query);
 
        // Boucle sur les enregistrements pour leur affichage
        while($row = mysql_fetch_array($resultats)) {
?>
        <tr>
          <td><font face=Arial color=#000080 size=2>
            <?php print "$row[nom]"; ?>
            </font></td>
          <td><font face=Arial color=#000080 size=2>
            <?php print "$row[email]"; ?>
            </font></td>
        </tr>
        <?php
        echo "\n";
        }
?>
      </table>
          </td>  
        </tr>
<?php
        // Affichage du navigateur  
        navigateur($nblignes,$debut,$limite);
        mysql_free_result($resultats);
?>
      </table>
<?php
    } else print("Aucun enregistrement, désolé !\n" );
?>


 
ET CA C'EST LE CODE DES FONCTIONS (navig.php) :
 

<?php  
#########################################  
# Affichage du navigateur en bas de page  
#########################################  
 
function navigateur($nblignes,$debut,$limite) {  
 
    // Calcule le nombre devant posseder un lien d'accès  
    $pages=intval($nblignes/$limite);  
 
    // $pages contient la partie entière du résultat de la division...  
    // ...s'il y a un reste on ajoute une page  
    if ($nblignes%$limite) $pages++;  
 
    if ($pages > 1) {  
?>  
        <tr>  
          <td>  
<?php  
        // Creation des liens vers les pages virtuelles contenant les autres resultats  
        if ($debut>=$limite) { // On ne cree pas de lien "PRECEDENT" si debut vaut 0  
            $precdebut=$debut-$limite;  
            print "<A href=\"$PHP_SELF?debut=$precdebut\">  
            <img src=\"images/suitegauche.gif\" border=0></A>\n";  
        }  
 
        for ($i=1;$i<=$pages;$i++) { // affichage des liens numerotes  
            $nouvdebut=$limite*($i-1);  
            if ($nouvdebut == $debut) {  // numero sans lien
                print "<b>$i</b>&nbsp;\n";  
            } else { // numero avec lien
            print "<a href=\"$PHP_SELF?debut=$nouvdebut\">$i</a>&nbsp;\n";  
            }  
        }  
 
        // verification si nous sommes a la derniere page  
        if ($debut!=$limite*($pages-1)) {  
            // nous ne sommes pas a la derniere page donc il faut creer un lien "SUIVANT"  
            $nouvdebut = $debut+$limite;  
            print "<A href=\"$PHP_SELF?debut=$nouvdebut\">  
            <img src=\"images/suitedroite.gif\" border=0></A>\n";  
        }  
?>  
          </td>  
        </tr>  
<?php  
    }  
}

Reply

Marsh Posté le 27-05-2004 à 12:08:30    

T'as mal lu mes modifs, je te remets le bloc entier...
 

Code :
  1. $query = "SELECT * FROM tabletest";
  2.     $numresultat = mysql_query($query);
  3.     $numrow = mysql_num_rows($numresultat);
  4.     $nblignes = $numrow[0];
  5.  
  6.     if ($nblignes > 0) {


 
doit Devenir :
 

Code :
  1. $query = "SELECT * FROM tabletest";
  2.     $numresultat = mysql_query($query);
  3.     $numrow = mysql_num_rows($numresultat);
  4.  
  5.     if ($numrow > 0) {


 
(pour ce qui est de la suite j'ai pas regardé, y aura peut être d'autres erreurs)

Reply

Marsh Posté le 27-05-2004 à 12:52:42    

PunkRod a écrit :


Si ça se trouve c'est un truc gros comme le nez au milieu de la figure. moi je comprends plus ce qui se passe, pas de message d'erreur par dessus le marché :(


 
Y a pas de count fonctionne ou pas en php, php n'a rien a voir la dedans, il ne traite pas le sql, il envoie la requête telle quelle au serveur. Dans ton cas, ama, ça vient de l'espace entre le count et la ( qui est supposé le suivre :)

Reply

Marsh Posté le 27-05-2004 à 12:59:17    

tiens je vais essayer ça... pas pensé une seule seconde à cet espace.


Message édité par PunkRod le 27-05-2004 à 13:02:13
Reply

Marsh Posté le 27-05-2004 à 12:59:44    

c'est ce que je me demandais aussi, mais j'ai qu'Oracle de dispo, et sous Oracle la requête passe ...

Reply

Marsh Posté le 27-05-2004 à 13:02:52    

ben phpmyadmin a pas bronché quand je lui ai copié/collé la requête.. j'ai eu le bon résultat... pour ça que j'ai pas remis en question la requête en fait.


Message édité par PunkRod le 27-05-2004 à 13:05:48
Reply

Marsh Posté le 27-05-2004 à 13:07:28    

En fait ton code ne s'applique pas pour mon appli qui affiche les resultats page par page, la requete se doit de compter le nombre de ligne en tant que tel et rien d'autre pour apres permettre la navig entre les differentes pages...
En plus apres je dois conditionner le comptage des lignes avec la clause WHERE...

Reply

Marsh Posté le 27-05-2004 à 13:09:37    

PunkRod a écrit :

tiens je vais essayer ça... pas pensé une seule seconde à cet espace.


 
enfin, j'ai fait le test ici, avec espace y a une erreur, sans ça passe :)

Reply

Marsh Posté le 27-05-2004 à 13:12:18    

PunkRod, peut-on voir la suite de ton code ? Notamment pour voir comment tu te sers du count après avoir récupéré la valeur.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 27-05-2004 à 13:26:26    

j'ai pas refait le code avec le COUNT dans la requête encore...
 
sinon pour contourner j'ai fait ça :

Code :
  1. $query_compte = "SELECT * FROM `historique` WHERE `id_ca` LIKE '".$row_ca['id_ca']."' AND `etat` = '3'";
  2. $compte = mysql_query($query_compte, $dbconnect) or die(mysql_error());
  3. $retours_sav = mysql_num_rows($compte) ;
  4. mysql_free_result($compte);
  5. } // C'est normal cette accolade, je ferme un truc ouvert  + haut ;)
  6. // là c'est le traitement que je fais derrière.  
  7. // la requête précédente (count) conditionne le 'if'
  8. if ($retours_sav >= $row_adm['max_reception_sav']) {
  9.    $tabl[$i]['alerte'][] = 1;
  10. }else {
  11.    $tabl[$i]['alerte'][] = 0;


Message édité par PunkRod le 27-05-2004 à 13:28:42
Reply

Marsh Posté le 27-05-2004 à 13:33:35    

Ouais mais y'a aucune raison que le count plante. -_-


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 27-05-2004 à 13:34:47    

ben je viens de tester, avec l'espace en moins ça passe nickel...  
 
Je saurais pour la prochaine fois ! :)

Reply

Marsh Posté le 27-05-2004 à 13:35:49    

ouais mes les gars on y est plus du tout là : comment faites vous pour conditionner une fonction COUNT dans une requete??? c'est celà mon gros probleme a la base  :(

Reply

Marsh Posté le 27-05-2004 à 13:37:57    

zetmuta a écrit :

ouais mes les gars on y est plus du tout là : comment faites vous pour conditionner une fonction COUNT dans une requete??? c'est celà mon gros probleme a la base  :(


Inspire toi librement de mon code si tu veux, car ça marche maintenant... :o  
et y a des conditions dedans ;)

Code :
  1. $query_compte = "SELECT COUNT(*) AS compte FROM `historique` WHERE `id_ca` LIKE '".$row_ca['id_ca']."' AND `etat` = '3'";
  2.     $compte = mysql_query($query_compte, $dbconnect) or die(mysql_error());
  3.     $row_compte = mysql_fetch_array($compte);
  4.           $retours_sav = $row_compte['compte'];

Reply

Marsh Posté le 27-05-2004 à 13:45:05    

Avec un WHERE :)

Reply

Marsh Posté le 27-05-2004 à 13:49:35    

Alors par exemple je veux simplement l'email = toto@toto.fr (champ email)
 
Ma requete était :
 
$query = "SELECT * FROM tabletest";  
    $numresultat = mysql_query($query);  
    $numrow = mysql_num_rows($numresultat);  
    $nblignes = $numrow[0];  
 
ALORS comment je l'ecris car le WHERE il ne comprend pas???

Reply

Marsh Posté le 27-05-2004 à 13:50:20    

pardon c'était     $query = "SELECT count(*) FROM tabletest";

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed