Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2953 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  fonction COUNT(*)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fonction COUNT(*)

n°740853
zetmuta
Posté le 26-05-2004 à 23:18:48  profilanswer
 

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

mood
Publicité
Posté le 26-05-2004 à 23:18:48  profilanswer
 

n°740862
naceroth
Posté le 26-05-2004 à 23:27:16  profilanswer
 

je ferais

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

n°740865
zetmuta
Posté le 26-05-2004 à 23:30:25  profilanswer
 

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

n°740872
naceroth
Posté le 26-05-2004 à 23:41:31  profilanswer
 

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

n°740880
zetmuta
Posté le 26-05-2004 à 23:49:37  profilanswer
 

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

n°740882
naceroth
Posté le 26-05-2004 à 23:54:25  profilanswer
 

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

n°740888
zetmuta
Posté le 27-05-2004 à 00:00:26  profilanswer
 

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....

n°740889
naceroth
Posté le 27-05-2004 à 00:09:15  profilanswer
 

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 :)

n°741035
PunkRod
Digital Mohawk
Posté le 27-05-2004 à 09:37:35  profilanswer
 

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é :(

n°741086
PunkRod
Digital Mohawk
Posté le 27-05-2004 à 10:03:16  profilanswer
 

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... :/

mood
Publicité
Posté le 27-05-2004 à 10:03:16  profilanswer
 

n°741203
zetmuta
Posté le 27-05-2004 à 11:00:01  profilanswer
 

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

n°741216
PunkRod
Digital Mohawk
Posté le 27-05-2004 à 11:05:33  profilanswer
 

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
n°741232
zetmuta
Posté le 27-05-2004 à 11:13:05  profilanswer
 

vais essayer

n°741249
zetmuta
Posté le 27-05-2004 à 11:23:03  profilanswer
 

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
   

n°741251
PunkRod
Digital Mohawk
Posté le 27-05-2004 à 11:23:58  profilanswer
 

mysql_num_rowS
 
faut le S

n°741333
zetmuta
Posté le 27-05-2004 à 11:55:39  profilanswer
 

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

n°741335
PunkRod
Digital Mohawk
Posté le 27-05-2004 à 11:57:55  profilanswer
 

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

n°741361
zetmuta
Posté le 27-05-2004 à 12:06:14  profilanswer
 

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  
    }  
}

n°741367
PunkRod
Digital Mohawk
Posté le 27-05-2004 à 12:08:30  profilanswer
 

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)

n°741449
naceroth
Posté le 27-05-2004 à 12:52:42  profilanswer
 

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 :)

n°741461
PunkRod
Digital Mohawk
Posté le 27-05-2004 à 12:59:17  profilanswer
 

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


Message édité par PunkRod le 27-05-2004 à 13:02:13
n°741463
Beegee
Posté le 27-05-2004 à 12:59:44  profilanswer
 

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

n°741468
PunkRod
Digital Mohawk
Posté le 27-05-2004 à 13:02:52  profilanswer
 

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
n°741478
zetmuta
Posté le 27-05-2004 à 13:07:28  profilanswer
 

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...

n°741486
naceroth
Posté le 27-05-2004 à 13:09:37  profilanswer
 

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 :)

n°741491
sielfried
Posté le 27-05-2004 à 13:12:18  profilanswer
 

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
n°741503
PunkRod
Digital Mohawk
Posté le 27-05-2004 à 13:26:26  profilanswer
 

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
n°741508
sielfried
Posté le 27-05-2004 à 13:33:35  profilanswer
 

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


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°741509
PunkRod
Digital Mohawk
Posté le 27-05-2004 à 13:34:47  profilanswer
 

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

n°741510
zetmuta
Posté le 27-05-2004 à 13:35:49  profilanswer
 

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  :(

n°741513
PunkRod
Digital Mohawk
Posté le 27-05-2004 à 13:37:57  profilanswer
 

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'];

n°741518
naceroth
Posté le 27-05-2004 à 13:45:05  profilanswer
 

Avec un WHERE :)

n°741524
zetmuta
Posté le 27-05-2004 à 13:49:35  profilanswer
 

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???

n°741525
zetmuta
Posté le 27-05-2004 à 13:50:20  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  fonction COUNT(*)

 

Sujets relatifs
$_SESSION Ne marche pas en fonction du navigateur (IE et Mozilla)Isnumeric: voilà une fonction qui parait bien !?
définir une fonction dans une application MFCutiliser une variable globale dans une fonction? [résolu]
JDBC PostGreSQL, insertions de PL/PGSQL trigger et fonction marche paspb avec la fonction is_file()
Recherche de la fonction [url=http://...etc...]descrip[ /url][PHP] Chercher un caractère dans une chaine... Quel fonction ?
Quelle fonction utiliser pour récupérer les coordonnées de la souris?"Redirection" en fonction de l'adresse tapée...[toujours pas résolu]
Plus de sujets relatifs à : fonction COUNT(*)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR