récursivité pour un forum

thegritch
Invité n'ayant pas de compte PHPfrance

08 sept. 2006, 15:14

Bonjour,

Je suis en train de développer un forum mais je bloque sur une fonctionnalité qu'on m'a demandé d'implémenter ! :?

En effet, le forum doit pouvoir présenter la liste des posts sous forme d'escalier :
=======
DEBAT
=======

Message 1
|_> message2
|_> message3
Message 4
|_> message5
...
Je crois pouvoir dire sans me tromper qu'en utilisant la récursivité je vais pouvoir y arriver. Mais je bloque sur le code à employer. Le forum est construit sur une base de donnée 4.1.12-standard

Voici les champs interressant pour la table BB_FORUM_POST :

==> ID_FORUM_POST (clé primaire sur le post)
==> ID_PARENT (Clé étrangère permettant de retrouver le père du post)
==> TITLE_FORUM_POST

A partir de là je cherche à afficher, comme dans mon exemple les posts.
Voici le code je suis en train de faire mais il ne me semble pas correcte.

function RecherchePere ($ID_SEARCH){

	SELECT fp.ID_FORUM_POST , fp.ID_PARENT, fp.TITLE_FORUM_POST
	FROM BB_FORUM_POST fp
	WHERE fp.id_parent = $ID_SEARCH;

	if ($ID_SEARCH > 0){
		RecherchePere ("(SELECT fp.id_parent FROM BB_FORUM_POST fp WHERE fp.id_parent = $ID_SEARCH)");		 				
	}

}//fin de la fonction
Bon je continue a chercher mais je ne trouve pas ce qu'il me faut.
Si vous avez des idées, des url's de la doc je suis preneur !

@+ Thegritch

thegritch
Invité n'ayant pas de compte PHPfrance

08 sept. 2006, 16:09

<?php function RecherchePere ($ID_SEARCH, $lvl){ 

SELECT fp.id AS FP_ID ,fp.post AS FP_POST, fp.date_created AS FP_DATE_C, fp.parent_id AS FP_PARENT
	FROM BB_FORUM_POST fp
	WHERE fp.parent_id = $ID_SEARCH
	
	if($boucle->numRows() > 0){
		while($_res_row_post = $boucle->fetchRow()) {
			echo "affichage des records";
			RecherchePere ($_res_row_post['FP_ID'],$lvl+1);
		}
	}

}//fin de fonction
Voilà c'est bon ! :P :P :P :P :P

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

09 sept. 2006, 13:20

Attention !

Tu viens de placer une requête SQL à l'intérieur d'une boucle. Cela signifie qu'au fur et à mesure que le nombre de messages traités augmente, le nombre de requête SQL augmente. Si un sujet affiche 20 messages, tu vas exécuter 21 requêtes uniquement pour avoir la liste des messages, et même si ton site n'est pas très populaire il va rapidement devenir (très) lent.

Il est très difficile de faire un forum "hiérarchique" correct car il y a de nombreux pièges à éviter. Si la fonction de hiérarchie est importante pour vous, je ne saurais trop vous conseiller d'installer Phorum*

Je ne connais pas la façon dont Phorum gère la hiérarchie, mais son programmeur n'est pas un idiot donc depuis le temps que le logiciel existe il a dû trouver un compromis acceptble ;)