8768 sujets

Développement web côté serveur, CMS

Bonjour!

J'ai 3 tables :
Une table articles : id, titre, contenu
Une table categories : id, nom.
Une table art_cat : id_art, id_cat.

Je souhaiterai afficher sur une même page, la liste des articles par catégorie :
upload/63581-articat.jpg

Mes problématiques sont les suivantes :
1. Seuls les catégories qui 'ont' des articles doivent s'afficher
2. J'arrive à afficher la liste de catégories qui ont effectivement des articles avec une requête à jointure interne :
 SELECT c.nom
           FROM categories c
	   INNER JOIN art_cat ac
		ON ac.id_cat = c.id 

A partir de là je vois comment boucler pour chaque catégorie, mais j'ai besoin que cela se fasse dynamiquement. Je ne sais pas trop comment m'exprimer... Smiley ohwell
En gros, j'imagine 2 boucles :
Une première qui sélectionne les catégories 'utilisées' et une seconde boucle à l'intérieur qui chargerait les articles correspondant :

foreach($categories as $category){
  Une seconde requête qui charge les articles avec un WHERE id_cat = $category->id
}

Mais bon, ça me semble bien alambiqué comme solution... Smiley rolleyes

Merci! Smiley smile
Bonjour,

vous pouvez le faire en 1 seule requete et un peu de code PHP.
Pour cela, la requête doit renvoyer la liste des articles, ainsi que les infos de la catégorie.
A notez que si un article est présent dans plusieurs catégories, il apparaîtra autant de fois.

SELECT c.id as id_cat, c.nom as nom_cat, a.id as id_art, a.titre, a.contenu
FROM categories c
INNER JOIN art_cat ac ON ac.id_cat = c.id 
INNER JOIN article a ON a.id = ac.id_art
ORDER BY c.id