Fonction récursive et count mysql a additionner

Résolu
cs_romega Messages postés 32 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 20 avril 2008 - 17 mars 2008 à 12:10
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 17 mars 2008 à 16:44
Salut,
Alors j'ai une fonction récursive qui a pour but de compter le nombre de sujet dans les catégorie + sous catégorie d'un forum. Je fais donc un count en mysql, le problème eet que je n'arrive pas a additionner tout les count. Par exemple si j'ai 2 sujet dans la catégorie et 2 dans la sous catégorie, je me retrouve avec 22 au lieu de 4.
Voila le code :

    function nombresujet($id)
{
$qnm=mysql_query("SELECT COUNT(*) FROM fsujet WHERE id='$id'");
$nbrsujet=mysql_result($qnm,0);
$qnm2=mysql_query("SELECT * FROM arbo WHERE id_parent='$id'");
while($res3=mysql_fetch_array($qnm2)){
nombresujet($res3['id']);}
}

Merci a vous :-)

9 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
17 mars 2008 à 16:20
    function nombresujet($id)
{
$qnm=mysql_query("SELECT COUNT(*) FROM fsujet WHERE catesujet='$id'");
$nbr=mysql_result($qnm,0);
$qnm2=mysql_query("SELECT * FROM arbo WHERE id_parent='$id'");
while($res3=mysql_fetch_array($qnm2)){
$nbr+=nombresujet($res3['id']);}
return $nbr;
}

echo nombresujet(....);

tu devrais indenter ton code... je ne vais pas l'indenter a ta place a chaque fois... c'est plus lisible quand c'est indente
/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
17 mars 2008 à 12:34
salut

elle est ou ton addition ?

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
0
cs_romega Messages postés 32 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 20 avril 2008
17 mars 2008 à 13:05
Bah la elle n'y est pas car toutes les facons d'additionner que j'ai essayé ne marchais pas, j'ai essayé avec un tableau, avec une boucle et d'autre essai désespérés.
Si tu pouvais justement me dire comment additionné les différent $nbrsujet ou plutot les différents résultat du count... ca m'avancerais pas mal ou en tout cas me donné des pistes.
Merci de ta réponse :-)
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
17 mars 2008 à 13:32
function nombresujet($id)
{
    $qnm=mysql_query("SELECT COUNT(*) FROM fsujet WHERE id='$id'");
    $nbrsujet=mysql_result($qnm,0);
    $qnm2=mysql_query("SELECT * FROM arbo WHERE id_parent='$id'");
        while($res3=mysql_fetch_array($qnm2)){
            $nbrsujet+=nombresujet($res3['id']);
        }
    return $nbrsujet;
}

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_romega Messages postés 32 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 20 avril 2008
17 mars 2008 à 15:04
Merci, ca marche mais a moitier en plus logiquement j'ai du mal a tout comprendre :-(
Donc j'ai fais ca :
    function nombresujet($id)
{
$qnm=mysql_query("SELECT COUNT(*) FROM fsujet WHERE catesujet='$id'");
$nbr=mysql_result($qnm,0);
$qnm2=mysql_query("SELECT * FROM arbo WHERE id_parent='$id'");
while($res3=mysql_fetch_array($qnm2)){
$nbr+=nombresujet($res3['id']);}
echo $nbr;
return $nbr;
}

J'ai remplacé $nbrsujet par $nbr, et rajouté un echo $nbr mais il est peut être mal placé car au lieu de m'afficher 5 il m'affiche 25 sachant qu'il y a 3 sujet dans la catégorie et 2 dans la sous catégorie. Comment faire pour n'affiché que 5 ? et pas le nombre de la sous catégorie ?
Je sais pas si je suis trés clair...
0
cs_romega Messages postés 32 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 20 avril 2008
17 mars 2008 à 16:32
Désolé mais ca veut dire quoi indenter ?
0
cs_romega Messages postés 32 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 20 avril 2008
17 mars 2008 à 16:35
Merci ! super c'est ca, t'es un génie du php. Est ce que tu pourrais m'expliquer un peu la logique du echo nombresujet(..) car d'ici a ce que je comprenne tout seul...
0
cs_romega Messages postés 32 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 20 avril 2008
17 mars 2008 à 16:40
Pour indenter j'ai fait une recherche et j'ai trouvé, je suis désolé, la prochaine fois j'essaierais d'indenter comme il faut.
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
17 mars 2008 à 16:44
:) merci :)

indenter, c'est mettre des tabulations comme je l'ai fait plus haut, ca sert a separer les blocs, on relit mieux son code ensuite.

l'histoire du echo, faut le voir comme une fonction en math :

ta fonction nombresujet :

nombresujet est une fonction qui prend comme parametre un $id, et qui renvoie le nombre de sujets qui ont pour parent (au sens large) le sujet qui a pour id $id.

ca, c'est ce qu'elle fait, maintenant, faut voir comment elle le fait :
elle cherche le nombre d'enfants directs.
pour chaque enfant direct, elle veut le nombre d'enfants(au sens large) de cet enfant direct, et elle les somme.

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
0
Rejoignez-nous