Page 1 sur 1

affichage de données en boucle

Posté : 17 déc. 2007, 12:03
par Invité
Bonjour,
j'ai des articles qui appartiennent à des catégories.
J'ai 2 tables distinctes pour les articles et les catégories.
Chaque article possède un champ qui stocke l'id de la catégorie d'appartenance.

J'arrive à récupérer tous les articles avec l'info sur la catégorie grâce à une requete mysql.
Mon problème se trouve à l'affichage.

Pour afficher tous les articles en boucle, j'utilise:
while ($r = mysql_fetch_array($result))
{
  echo $r['nomArticle'];

}
Si je veux afficher la catégorie d'appartenance de l'article, ça marche aussi. Le problème est que cette technique va m'afficher le nom de catégorie autant de fois qu'il y a d'articles.
Si j'ai 10 articles, je vais avoir le nom de catégorie 10 fois (1 fois pour chaque article).

Comment faire pour afficher le nom de catégorie une seule fois pour les articles concernés, comme ceci:
categorie 1
- article 1
- article 2
- article 3

categorie 2
- article 1
- article 2
- article 3
et pas
- article 1 => catégorie 1
- article 2 => catégorie 1
- article 3 => catégorie 1

- article 1 => catégorie 2
- article 2 => catégorie 2
- article 3 => catégorie 2
Merci pour vos réponses.

Posté : 17 déc. 2007, 12:09
par Invité
en gros, comment afficher des données sous forme d'arbre et pas de liste?

Posté : 17 déc. 2007, 12:24
par d0m
avant l'affichage, il faut voir comment stocker les informations à afficher pour que l'organisation corresponde à tes besoins et que l'affichage s'en trouve facilitée.

Il te suffit de structurer tes informations de la manière que tu énonces.

par exemple :
un tableau contenant en clé le nom des catégories et comme valeurs un tableau contenant les différents articles de cette catégorie.

Code : Tout sélectionner

array( categorie1 => array( article 1,article2,article3... ), categorie2 => array( article 1,article2,article3... ), .... )

Posté : 17 déc. 2007, 12:26
par Truc
Même réponse qu'ici :wink:

Posté : 17 déc. 2007, 12:37
par Ryle
Pesonnellement je me contente d'une variable temporaire dans laquelle je stocke ma catégorie, et je l'affiche dès qu'elle change.
$cat = '';
while ($r = mysql_fetch_array($result)) { 
  if ($cat != $r['categorie']) {
    $cat = $r['categorie']
    echo '<h3>'.$cat.'</h3>';
  }
  echo $r['nomArticle']; 
}
Suffit de rajouter un tri par catégorie en premier dans la requête pour avoir les articles dans l'ordre et le tour est joué :)

Posté : 17 déc. 2007, 12:53
par d0m
C'est pratique mais il faut alors qu'un article appartienne à une seule catégorie.

Posté : 17 déc. 2007, 13:15
par Ryle
Non pas spécialement.. si les articles peuvent être associées à plusieurs catégories, tu dois avoir une seconde table dans ta base et tu auras fait une jointure externe pour lier tes données, ce qui aura pour effet de répéter l'article dans chacune des catégories auxquelles il est associé :)

En gros ta requête retournera :

Code : Tout sélectionner

Categorie1, ArticleA Categorie1, ArticleB Categorie2, ArticleA Categorie2, ArticleC Categorie2, ArticleD
Et le principe fonctionne toujours :)