Fonction récursive et count mysql a additionner [Résolu]

Signaler
Messages postés
32
Date d'inscription
jeudi 8 novembre 2007
Statut
Membre
Dernière intervention
20 avril 2008
-
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
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

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
    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
*/
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
salut

elle est ou ton addition ?

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
Messages postés
32
Date d'inscription
jeudi 8 novembre 2007
Statut
Membre
Dernière intervention
20 avril 2008

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 :-)
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
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
*/
Messages postés
32
Date d'inscription
jeudi 8 novembre 2007
Statut
Membre
Dernière intervention
20 avril 2008

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...
Messages postés
32
Date d'inscription
jeudi 8 novembre 2007
Statut
Membre
Dernière intervention
20 avril 2008

Désolé mais ca veut dire quoi indenter ?
Messages postés
32
Date d'inscription
jeudi 8 novembre 2007
Statut
Membre
Dernière intervention
20 avril 2008

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...
Messages postés
32
Date d'inscription
jeudi 8 novembre 2007
Statut
Membre
Dernière intervention
20 avril 2008

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.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
:) 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
*/