Bonjour :]
Je ne parviens pas à obtenir le résultat voulu sur une requête. Tout du moins je ne sais pas comment m'y prendre.
Pour faire simple, j'ai 3 tables:
ARTICLES
id_art
texte
CATEGORIES
id_cat
titre
ART2CAT
id_art
id_cat
La table ART2CAT fait le lien entre les 2 autres tables. Un article pouvant avoir plusieurs catégories et une catégories plusieurs articles, la cardinalité est donc 1,n -- 0,n
Pour récupérer un seul article, son texte et le titre des catégories qui lui sont associées, je fais cette requête:
En supposant que l'article avec l'ID 1 a 2 catégories, cette requête renvoit 2 lignes que je peux traiter en php pour n'afficher qu'une seule fois l'article. (Cette méthode me semble déjà assez suspecte en fait^^')
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT a.*, c.* FROM articles a INNER JOIN art2cat a2c ON a2c.id_article = a.id_article INNER JOIN categories c ON c.id_categorie = a2c.id_categorie WHERE a.id_article = 1 LIMIT 1
Là où j'ai vraiment un problème, c'est lorsqu'il s'agit d'afficher plusieurs articles. Imaginons que je souhaite afficher 5 articles:
Dans ce cas, l'article avec l'ID 1 qui a 2 catégories renvoie déjà 2 lignes. Quelque soit le nombre de catégories associés aux autres articles, je ne pourrai de toute façon afficher que 4 articles différents et non 5, comme initialement prévu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT a.*, c.* FROM articles a INNER JOIN art2cat a2c ON a2c.id_article = a.id_article INNER JOIN categories c ON c.id_categorie = a2c.id_categorie ORDER BY id_art DESC LIMIT 5
Quelle est la manière la plus optimisée d'obtenir les résultats attendus?
J'ai bien pensé à exécuter une sous-requête qui va chercher à chaque article les catégories qui lui sont associées. Mais si je veux afficher 20 articles, je vais me retrouver avec 21 requêtes. Bonjour l'optimisation
Cette cardinalité est pourtant courante... J'ai vraiment l'impression de passer à côté d'une évidence >_<
Merci d'avance pour l'aide que vous pourrez m'apporter^^
Partager