jointure + liste imbriquée

Petit nouveau ! | 3 Messages

10 sept. 2011, 19:04

Bonjour,

une base de données d'un blog contient deux tables :
- table post (id, titre, texte)
- table commentaire (id, post_id, texte, auteur, date)

Le but est d'afficher la liste des post suivi de la liste imbriquée des commentaires comme ceci :
--------------
- titre post 1
o commentaire A
o commentaire B
- titre post 2
- titre post 3
o commentaire C
o commentaire D
--------------
Afin de récupérer toutes les infos j'ai donc travaillé la requête suivante, de type jointure :

Code : Tout sélectionner

SELECT p.titre, c.texte FROM posts p LEFT JOIN commentaires c ON p.id = c.post_id
En revanche je ne parviens pas en à afficher via php les listes comme souhaité.
Comment feriez-vous ?

D'ailleurs je me demande si mon idée de jointure est la bonne...
Merci par avance pour vos réponses !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 sept. 2011, 19:15

L'idée est bonne, quant à la réalisation, il te faut ajouter un tri à minima par titre pour que les commentaires soient regroupés, puis côté php stocker le titre dans une variable temporaire. Cela te permet lorsque tu parcours les enregistrements, si le titre courant est différent de celui stocké dans ta variable, tu affiches ce nouveau titre, puis le commentaire et tu mets à jour la variable temporaire. Si les valeurs sont identiques, tu affiches uniquement le commentaire :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 3 Messages

10 sept. 2011, 19:50

Je te remercie mais je n'ai pas compris le coup du "tri"... Si tu pouvais préciser ta pensée sur ce point.

En attendant, et suite à une réflexion stimulée par ta réponse :) j'ai trouvé une façon de traiter le besoin en créant un tableau de données multidimensionnel comme suit :
// la boucle
while($data = mysql_fetch_array($req))
	{	
		$titre = $data['titre'];
		$comment = $data['comment'] ;
		
		// creation d'un tableau multidimensionnel 
		// pour stocker les titres et commentaires 
		$tab[$titre][] = $comment ;
	}

// affichage des données du tableau
foreach($tab as $titre => $commentList)
{
	// affichage des titres
	echo $titre;
	echo '<br>';
	
	// affichage des commentaires associés
	foreach($commentList as $comment)
	{
		echo $comment;
		echo '<br>';
	}
}
// ça marche !!
Bon ça marche mais perso je trouve ça lourd...
D'autres idées ?