Crawdge | Bon, j'ai fait autrement vu que ca ne correspondait pas exactement à mon problème, mais j'ai quand même un soucis...
La situation : Je veux réaliser un tableau récapitulant les catégories à la racine, et le nombre de cours qui a été créés pour chacune pendant une période donnée.
Ma solution :
J'ai récupéré les catégories de profondeur=1 (qui sont donc à la racine, soit les catégories mères). Pour chaque catégories mères, je lance ma fonction récursive :recherche_nb_espace_ouvert_cat_racine(id de la catégorie, date début, date fin)
Cette fonction regarde s'il y a des cours dans cette categorie, cherche s'il elle a des categories filles, et additionne le nombre de cours dans la catégorie mère+ les cours des autres catégories filles.
S'il y a des catégories filles, on relance la récursive, sinon on retourne le nombre de cours qui sont dans la catégorie mère.
Mon code :
Code :
- $nb_cours_total=0; //On va additionné toutes les créations de cours toutes categories confondues
- $sql = "SELECT * FROM mdl_course_categories WHERE depth=1";
- // on selectionne toutes les rubriques de première profondeur (les rubriques principales)
- $categories_racine = mysql_query($sql);
- while($categorie=mysql_fetch_object($categories_racine))
- {
- $liste_cat.= "<tr><td>".$categorie->name."</td>";
- $nb_cours_cat_racine=recherche_nb_espace_ouvert_cat_racine($categorie->id,$debut,$fin);
- if($nb_cours_cat_racine==0){
- $liste_cat.= "<td>".$nb_cours_cat_racine."</td></tr>";
- }else{
- //le lien permet de voir dans une dialog en jquery, les cours créés dans cette periode
- $liste_cat.= "<td><a href='#' onclick='voir_ss_cat(".$categorie->id.",".$debut.",".$fin." );return false;'>".$nb_cours_cat_racine."</a></td></tr>";
- //on additionne pour avoir le nombre de cours total
- $nb_cours_total+=$nb_cours_cat_racine;
- }
-
-
- }
- $liste_cat.="</table>";
- fonction appellée :
- function recherche_nb_espace_ouvert_cat_racine($id_cat,$date_deb,$date_fin,$nb=0){
-
- //On recupere des infos sur la categorie
- $sql="SELECT * FROM mdl_course_categories WHERE id='".$id_cat."'";
- $info_cat=mysql_query($sql);
- $infos_cat=mysql_fetch_object($info_cat);
-
- //On cherche les courses qui sont dans la categorie et créées entre la date de debut et la date de fin
- $sql= 'SELECT * FROM mdl_course WHERE category='.$id_cat.' AND timecreated BETWEEN '.$date_deb.' AND '.$date_fin;
- $cours_racine_cat = mysql_query($sql);
-
- //On compte le nombre de courses qui sont dans cette categorie
- $nb+=mysql_num_rows($cours_racine_cat);
-
- //On cherche les courses qui sont dans la categorie et qui ont pour parent la categorie actuelle
- $sql = "SELECT * FROM mdl_course_categories WHERE parent=".$id_cat." ORDER BY sortorder";
- $ss_cats = mysql_query($sql);
- //On compte le nombre de categorie fille qu'il y a
- if(mysql_num_rows($ss_cats)!=0){
- //S'il y a des categories filles, pour chaqu'une on va récuperer leurs filles
- while($ss_cat=mysql_fetch_object($ss_cats))
- {
- //On recherche les filles de la categorie fille auquel on ajoute le compteur
- recherche_nb_espace_ouvert_cat_racine($ss_cat->id,$date_deb,$date_fin, $nb);
- }
- }else{
- //S'il n'y a pas de categorie fille, on a atteint le bout de la branche des sous categories de la categorie principale
- return $nb;
- }
- }
|
Mon problème actuel : J'ai bien la liste des catégories qui sont à la racine.
Cependant, pour certaines categorie, il ne m'affiche pas de résultat (même pas un simple 0)...
(alors que pour certaines, ca a l'air de fonctionner...)
Donc j'aurai besoin d'un oeil exterieur à mon problème, pour essayé de voir où je merdouille...
Merci d'avance en tout cas pour le temps de la lecture, et de la réponse éventuel !  |