Bonjour alors voila j'ai trois tables pour faire une taxonomie , des articles peuvent avoir plusieurs catégories , et donc le problème c'est que sur ma page d'index quand je liste mes articles je veux aussi lister ses catégories mais le résulta me donne une duplication du post pour avoir sa catégorie

POSTS
_id ___post___
1 | text1 |
2 | text2 |

RELATION
tid__ref__ ref_id _____TermsID____
1 | POSTS | 1 | 1 |
3 | POSTS | 1 | 2 |

TERMS
_ tid ___ name ___ type______
1 | PHP | category |
2 | MYSQL | category |
3 | DEV | tag |

la requête
SELECT * FROM POST
LEFT JOIN RELATION ON RELATION.ref_id=POST.id
LEFT JOIN TERMS ON TERMS.id=RELATION.TermsID ,

donc en retour j'ai
texte1 -> catégorie 1
texte1 -> catégorie 2

ce que j'aimerais c'est supprimer la duplication du texte1 qui comprend l'article , sont titre etc ...
comme ca

texte 1 ->catégorie 1 , catégorie 2

j’espère que c'est clair je savais pas si je devais poster ca dans PHP ou alors dans Mysql mais bon .
Merci a vous .

7 réponses


Bahamut45
Réponse acceptée

Bonsoir,

Voici le meilleure resultat que j'ai obtenu avec les données que tu m'as mis entre les mains ;)
http://sqlfiddle.com/#!2/9c4d0/22/0

Cordialement

salut dans ton cas je tenterai plutot un truc en while imbriqué

<?php 
$sql = "SELECT `id` , `post` FROM `posts` ORDER BY `id` ASC"; ;
$req = $DBPDO ->query($sql);
while($post=$req->fetch(PDO::FETCH_OBJ)) 
    { 
        echo $post->post.":";
        $sql2="SELECT * FROM RELATION WHERE `posts`= '$post->post';
        $req2 = $DBPDO ->query($sql2);
        while($cat=$req2->fetch(PDO::FETCH_OBJ)) 
            { 
                echo $cat->cat.",";
            }
        echo "<br>";
    }
?>

pas sur de mon coup , mais je pense que le principe reste clair

Merci flo pour ta réponse mais en fait je veux utiliser une jointure pour justement ne pas a avoir a faire une requête sql dans une boucle si non ça serait trop lourd imagine dix requêtes pour affiches un articles ayant 8 tags et une catégorie et si j'affiche 5 articles c'est 5*10 waw

Bonjour,

Fais moi un sqlfiddle et je te trouverai la meilleure jointure ;)

Cordialement

Hello bahamut alors je n'ai jamais utilisé sqlfiddle mais la j'ai appris ca ma prise trois 30 minutes pour faire le schéma http://sqlfiddle.com/#!2/9c4d0
c'est a toi de jouer , au fait ca fait aussi du benchmark ou pas ? si non je suis repreneur de toute solution pour fait simplement du benchmak sur les requêtes et l'usage des ressources je précise que je suis sous windows et que j'utilise wamp ;)
Merci

Merci beaucoup je vais voir ça , ce qui je comprends pas c'est pourquoi avoir fait un GROUP BY sur a.title ?
si tu pouvais m'expliquer le but de cette manœuvre ce serrait sympa ,
encore Merci bahamut ;)

Bonjour,

Pour l'explication je te laisse aller voir la doc de mysql http://dev.mysql.com/doc/refman/5.0/fr/group-by-functions.html car je vois pas comment te l'expliquer simplement.

Cordialement