Page 1 sur 1

Comptage en php d'occurences Mysql

Posté : 22 févr. 2012, 17:24
par oliopur
Je suis pas tres bon et je dois finir un site acuellement mon problème est celui-ci :
J'ai une base de donnée avec une base 'membres' contenant les champs 'nom' et 'parrain'
le nom est unique, tandis que le parrain peut être nul ou contenir plusieurs fois le meme nom.
exemple :
nom parrain
toto1 lulu1
toto2
toto3 lulu2
toto4 lulu1
etc..

Je souhaite compter les occurences des parrains et les sortir sous cette forme :
parrainage parrain
2 lulu1
1 lulu1

et je dois l'avouer je n'y arrive pas, j'ai essayé différentes méthodes mais je suis certainement trop nul !!!
le formatage de sortie se fait sous HTML fans une boucle while pour ne pas dépasser les 6 lignes.
est ce que quelqu'un aurait LA solution ?
Merci à tous

Re: Comptage en php d'occurences Mysql

Posté : 22 févr. 2012, 17:33
par Thibaud C
SELECT  parain, COUNT( * ) AS nb_parainage
FROM  membres 
GROUP BY parain

un petit truc du genre ca va bien, on peut faire beaucoup de chose via le SQL :)

Re: Comptage en php d'occurences Mysql

Posté : 22 févr. 2012, 17:38
par oliopur
merci, mais c"est un code sql...
moi je suis sur une page php... il me faut du php et la je suis coincé...

Re: Comptage en php d'occurences Mysql

Posté : 22 févr. 2012, 17:50
par Shenryu
Salut,
<?php
$resource = mysql_query('La requête de Thibaud');
while ($row = mysql_fetch_array($resource)) {
    // J'affiche mes données
}

?>
++

Re: Comptage en php d'occurences Mysql

Posté : 22 févr. 2012, 18:02
par oliopur
en fait j'avais ce code...
mais ca me sort les données en sequentiel
sans cumul

Code : Tout sélectionner

<table border="0" width="189" cellspacing="4" cellpadding="0"> <br /> <tr> <td width="59" align="center"><strong>Nombre</strong></td> <td><strong>Parrain</strong></td> </tr> <?php $req2 = mysql_query("SELECT * FROM membres where 'parrain'<>''"); // Affichage des données parraainage depuis BdD while($r = mysql_fetch_array($req2)) { echo ' <tr> <td width="59" align="center" bgcolor="#D8F0FE">nombre</td> <td><strong>'.$r['parrain'].'</strong></td> </tr>'; } ?> </table>
le resultat est celui-ci :
Nombre Parrain
nombre
nombre
nombre
nombre
nombre
nombre
nombre swb
nombre swb
nombre swb
nombre test1
nombre
et ca ne va pas...

Re: Comptage en php d'occurences Mysql

Posté : 22 févr. 2012, 18:20
par gandaganda
comment veux-tu le résultat ?
donne un exemple clair STP

avec un chemat simple de ta base pour pouvoir comprendre comment sont stockée les données



voici comment compter pour chaque parrain :
etant donné que je ne connais pas ta (ou tes) table(s) ni sa structure, je fais une requete hyper basique :
$res = mysql_query('SELECT * FROM matable WHERE parain="quelquechose"');
$Total = mysql_num_rows($res);
tu peux integrer cette petite requete dans la requete de base pour obtenir le nombre que tu recherche

example à partir de ton bout de code :
<table border="0" width="189" cellspacing="4" cellpadding="0">
   

       <tr>
         <td width="59" align="center"><strong>Nombre</strong></td>
         <td><strong>Parrain</strong></td>
      </tr>
      <?php
         $req2 = mysql_query("SELECT * FROM membres where 'parrain'<>''");
         //  Affichage des données parraainage depuis BdD 
         while($r = mysql_fetch_array($req2))
         {

/************/
$res = mysql_query('SELECT * FROM matable WHERE parain="quelquechose"');
$Total = mysql_num_rows($res);
/*******/

            echo ' <tr>
            <td width="59" align="center" bgcolor="#D8F0FE">'.$Total .'</td>
            <td><strong>'.$r['parrain'].'</strong></td>
            </tr>';
         }
      ?>
   </table>

je sais c'est vachement basique et il y a d'autre façons de faire mais comme ça ça peut marcher

a+

Re: Comptage en php d'occurences Mysql

Posté : 22 févr. 2012, 18:28
par xTG
@gandaganda > Regardes la requête qui lui a été donnée plus haut. C'est tout de même mieux que ce que tu proposes. ;)

Re: Comptage en php d'occurences Mysql

Posté : 22 févr. 2012, 18:37
par gandaganda
@gandaganda > Regardes la requête qui lui a été donnée plus haut. C'est tout de même mieux que ce que tu proposes. ;)
tout dépends de ce que l'on veux faire ;)

et comme personne ne connais la structure de la base, il est possible que cette façon de procéder ne corresponde pas

bref, tu as peut-être raison, comme on dis : qui ne tente rien n'a rien :roll:



a+ :mrgreen:

Re: Comptage en php d'occurences Mysql

Posté : 22 févr. 2012, 19:14
par moogli
C'est juste anti performant de faire une requête complète autant de fois qu'il a de membre alors que cela doit pouvoir se faire en SQL au pire avec une sous requête ;) ce sera toujours plus performant (ne seraisse qu'en terme de bande passante utilisé, temps d'occupation du serveur SQL etc etc).

Mais comme tu l'indique sans la structure de la table ça va pas avancer ;)

@+

Re: Comptage en php d'occurences Mysql

Posté : 22 févr. 2012, 19:55
par oliopur
commme je l'indiquais dans mon 1er post la structure de la table est on ne peux plus simple
1 id int(10) AUTO_INCREMENT
2 cle varchar(255) latin1_swedish_ci Non
3 parrain varchar(255) latin1_swedish_ci Non
4 nom varchar(255) latin1_swedish_ci Non

ce que j'ai donné plus haut m'affiche de manière sequentielle les parrains
je repete le code :

Code : Tout sélectionner

<table border="0" width="189" cellspacing="4" cellpadding="0"> <tr> <td width="59" align="center"><strong>Nombre</strong></td> <td><strong>Parrain</strong></td> </tr> <?php $req2 = mysql_query("SELECT * FROM membres where 'parrain'<>''"); // Affichage des données parraainage depuis BdD while($r = mysql_fetch_array($req2)) { echo ' <tr> <td width="59" align="center" bgcolor="#D8F0FE">[color=#FF0040]X[/color]</td> <td><strong>'.$r['parrain'].'</strong></td> </tr>'; } ?> </table>
ce qui donne :
X swb
X swb
X swb
X test1

Ce que je cherche à faire c'est quelque chose qui me sorte un truc comme ça :
Parrainages Parrain
3 swb
1 test1

Donc qui comptabilise les occurences d'un meme nom et me l'affiche.

J'ai fait ça mais ca ne marche pas:

Code : Tout sélectionner

<?php $req2 = mysql_query("SELECT * FROM membres where parrain<>''"); // Affichage des données parraainage depuis BdD while($r = mysql_fetch_array($req2)) { $nomp=$r['parrain']; $comptage=0; $req1 = mysql_query("SELECT * FROM membres where parrain=$nomp"); while ($r2 = mysql_fetch_array($req1)) { $comptage =$comptage+1; } echo ' <tr> <td width="59" align="center" bgcolor="#D8F0FE">$comptage</td> <td><strong>'.$r['parrain'].'</strong></td> </tr>'; } ?>
Ce que je cherche a faire est de creer un total par parrain
Je continue à essayer d'autres variantes mais j'ai besoin d'aide...
Merci à vous en tout cas pour vos réponses.

Re: Comptage en php d'occurences Mysql

Posté : 22 févr. 2012, 20:08
par moogli
Tu a donc déjà eu ta réponse, la aussi on se répète.
SELECT  parain, COUNT( * ) AS nb_parainage
FROM  membres 
GROUP BY parain
:)
J'ajouterai que normaliser ta table ne serais pas un mal.

À oui j'allais oublier : faut adapter les noms des champs aux tiens....

@+

Re: Comptage en php d'occurences Mysql

Posté : 23 févr. 2012, 01:57
par oliopur
OK, j'ai trouvé...
Je suis parti autrement pour éviter les aller et retours vers la base de donnée et suis parti sur un tableau.
Vos conseils m'ont bien aidés MERCI A TOUS
pour info voici le code final

Code : Tout sélectionner

<table border="0" width="189" cellspacing="20" cellpadding="0"> <tr> <td width="59" align="center"><strong>Nombre</strong></td> <td><strong>Parrain</strong></td> </tr> <?php $req2 = mysql_query("SELECT * FROM membres where parrain<>''"); $comptage =0; $coompt=6; // nombre d'affichage // Mise en tableau de tous les parrains non vides depuis BdD while($r = mysql_fetch_array($req2)) { $nomp[$comptage] = $r['parrain']; $comptage= $comptage+1; } $ar = array_count_values(array_map('strtolower', $nomp)); // Comptage sous la forme [parrain] => nombre // (en enlevant les maj) ksort($ar); // tri du tableau selon le nombre du plus grand //au plus petit foreach ($ar as $key => $val) { $coompt=$coompt-1; if($coompt > 0) // Comptage des affichages puis affichage { echo ' <tr> <td width="59" align="center">'.$val.'</td> <td><strong>'.$key.'</strong></td> </tr> '; } } ?> </table>
ENCORE MERCI A TOUS