2013-07-02 2 views
0

Salut J'essaie de bricoler ceci dans une déclaration de doctrine2, malheureusement j'ai le noeud dans mon cerveau en ce moment.Choisissez parmi ManyToMany seulement si tous les IDs s'appliquent

J'ai 3 tables

post

id | unrelated stuff 

post_has_tag

post_id | tag_id 
1   1 
1   2 
2   2 

tag

id | name 
1 smth 
2 smthelse 

maintenant je veux utiliser une navigation par tag, un peu comme ici sur stackoverflow et c'est là que mon problème s'applique. Je veux sélectionner seulement le post_id de ma table m2n si tous les identifiants s'appliquent. Et je suis un peu bête ici puisque tous mes attemts me donnent deux entrys ou pas.

Si vous pouvez me donner le sql je serai bien, si vous pouvez me donner le dql ce sera incroyable

E: clarification Donc, pour résumer les choses:

J'utilise smth comme $ object-> filterPostsByTag (array (1,2)); maintenant je veux seulement les messages où au moins les étiquettes avec l'identification 1 et 2 sont assignées. Mes tentatives avec des jointures ont résulté en renvoyant les deux postes ou aucun.

Répondre

1

Si vous voulez que tous les IDs (probablement ids "tag") à appliquer, puis utiliser l'agrégation avec une clause having:

select pht.post_id 
from post_has_tag pht 
group by pht.post_id 
having count(distinct pht.tag_id) = (select count(distinct t.tag_id) from tag t) 

EDIT: (Après OP a été révisé)

Si vous voulez seulement deux balises particulières, vous pouvez utiliser la même idée:

Si vous voulez que tous les IDs (probablement « tag ») pour appliquer ids, utilisez l'agrégation avec une clause having:

select pht.post_id 
from post_has_tag pht 
group by pht.post_id 
having max(pht.tag_id = 1) > 0 and 
     max(pht.tag_id = 2) > 0 

Ceci renvoie tous les articles qui ont les deux balises. Si vous voulez que les deux balises et rien d'autre:

select pht.post_id 
from post_has_tag pht 
group by pht.post_id 
having max(pht.tag_id = 1) > 0 and 
     max((pht.tag_id <> 1) or (pht.tag_id <> 2)) = 0 
+0

essayer et le contrôle de retour – Soundz

+0

eh oui sql fonctionne, maintenant il est temps d'enseigner à Doctrine2, leur analyseur est un peu hors il semble – Soundz

Questions connexes