affichage de données en boucle

Invité
Invité n'ayant pas de compte PHPfrance

17 déc. 2007, 12:03

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.

Invité
Invité n'ayant pas de compte PHPfrance

17 déc. 2007, 12:09

en gros, comment afficher des données sous forme d'arbre et pas de liste?

d0m
Mammouth du PHP | 1141 Messages

17 déc. 2007, 12:24

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... ), .... )

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 déc. 2007, 12:26

Même réponse qu'ici :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

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

17 déc. 2007, 12:37

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é :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

d0m
Mammouth du PHP | 1141 Messages

17 déc. 2007, 12:53

C'est pratique mais il faut alors qu'un article appartienne à une seule catégorie.

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

17 déc. 2007, 13:15

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...