Hey mensen,
Ik heb de volgende tabellen:
MenuCategories
CategoryID (PK)
CategoryName
PagesPublished
PageID (PK)
CategoryID (PK)
En PageID komt hieruit:
Pages
PageID (PK)
PageName
(sommige velden zijn weggelaten omdat deze niet interressant zijn voor de query)
Wat nu de bedoeling is, is dat een pagina gepubliceerd kan worden in een category, maar dat 1 pagina maar 1 keer gepubliceerd kan worden. Daarom ook de PK als een gemeenschappelijke sleutel. Nu wil ik echter in een dropdown list een lijstje laten zien, waar de pagina nog gepubliceerd kan worden, zonder de categorien waar deze natuurlijk al is gepubliceerd.
Ik begon gewoon met een query met inner join, wat natuurlijk niet ging werken, omdat niet elke Categorie een gepubliceerde item hoeft te bevatten. Daarom ging ik verder met een LEFT OUTER JOIN, wat nu bijna werkt:
@PageID wordt geleverd door de dropdownbox, om te bepalen om welke pagina het nu gaat. De bedoeling is dat de categorien waarin de pagina al gepubliceerd is, niet voorkomen in de result van de query.
Het probleem zit erin, dat hij ook dubbele CategoryID's laat zien als er verschillende pagina's in een Category zijn gepublished, dit heb ik opgelost door middel van distinct. Het echte probleem schuif ik echter alleen maar naar voren; als er meerdere pagina's in een categorie gepubliceerd zijn, komt de categorie nog gewoon voor in de result, ook al is de pagina waarom het draait daar al in gepubliceerd.
Dit komt natuurlijk omdat ik moet zoeken of de combinatie van PageID en CategoryID voorkomt in PagesPublished, om dan de desbetreffende Category weglaten. Ik heb alleen geen idee hoe ik dit in een goede query moet zetten. Zit ik in de goede richting en heeft iemand een idee?
Ik heb de volgende tabellen:
MenuCategories
CategoryID (PK)
CategoryName
PagesPublished
PageID (PK)
CategoryID (PK)
En PageID komt hieruit:
Pages
PageID (PK)
PageName
(sommige velden zijn weggelaten omdat deze niet interressant zijn voor de query)
Wat nu de bedoeling is, is dat een pagina gepubliceerd kan worden in een category, maar dat 1 pagina maar 1 keer gepubliceerd kan worden. Daarom ook de PK als een gemeenschappelijke sleutel. Nu wil ik echter in een dropdown list een lijstje laten zien, waar de pagina nog gepubliceerd kan worden, zonder de categorien waar deze natuurlijk al is gepubliceerd.
Ik begon gewoon met een query met inner join, wat natuurlijk niet ging werken, omdat niet elke Categorie een gepubliceerde item hoeft te bevatten. Daarom ging ik verder met een LEFT OUTER JOIN, wat nu bijna werkt:
SQL:
1
2
3
4
5
6
7
8
| SELECT MenuCategories.CategoryID, MenuCategories.CategoryName FROM MenuCategories LEFT OUTER JOIN PagesPublished ON MenuCategories.CategoryID = PagesPublished.CategoryID WHERE (PagesPublished.PageID <> @PageID OR PagesPublished.PageID IS NULL) |
@PageID wordt geleverd door de dropdownbox, om te bepalen om welke pagina het nu gaat. De bedoeling is dat de categorien waarin de pagina al gepubliceerd is, niet voorkomen in de result van de query.
Het probleem zit erin, dat hij ook dubbele CategoryID's laat zien als er verschillende pagina's in een Category zijn gepublished, dit heb ik opgelost door middel van distinct. Het echte probleem schuif ik echter alleen maar naar voren; als er meerdere pagina's in een categorie gepubliceerd zijn, komt de categorie nog gewoon voor in de result, ook al is de pagina waarom het draait daar al in gepubliceerd.
Dit komt natuurlijk omdat ik moet zoeken of de combinatie van PageID en CategoryID voorkomt in PagesPublished, om dan de desbetreffende Category weglaten. Ik heb alleen geen idee hoe ik dit in een goede query moet zetten. Zit ik in de goede richting en heeft iemand een idee?