Ik zit met een probleem om in mijn cms blog items op te halen. Ik werk met tags, en nu moet ik alle recente artikelen ophalen die NIET zijn getagged met een bepaald id. Het schema:
Daar had ik de volgende query op los gelaten, maar dat werkt niet:
Alvast bedankt
code:
1
2
3
4
| items tags tagged_with id id id ... name tag_id ... item_id |
Daar had ik de volgende query op los gelaten, maar dat werkt niet:
SQL:
Met wat hulp is er dit uit gekomen:1
2
3
4
5
6
| SELECT I.id FROM plugin_blog_items AS I LEFT JOIN plugin_blog_tagged_with AS P ON I.id=P.item_id AND P.tag_id != 6 GROUP BY I.id ORDER BY I.id DESC |
SQL:
Dat werkt op zich prima. Maar deze query zal beduidend langzamer worden als er meerdere exceptions bijkomen. In mijn geval zal ik elke keer een nieuwe subquery maken. Het lijkt me duidelijk dat het erg inefficient is, dus vraag ik hier: hoe kan ik artikelen ophalen die (bijvoorbeeld) niet zijn getagged met tag_id 4, 5 en 6?1
2
3
4
5
6
7
| SELECT i.id FROM items i WHERE 6 NOT IN ( SELECT t.tag_id FROM tagged_with t WHERE t.item_id = i.id ) |
Alvast bedankt
[ Voor 1% gewijzigd door mithras op 15-04-2007 22:11 . Reden: even "werkt niet" toegevoegd ]