Ik ben op dit moment bezig om ons eigen gemaakte webshop database (MSSQL 2000) uit te breiden van het princiepe "Categorie > Product" naar óf "Categorie > Product" óf Categorie > Sub Categorie > Product. Opzich lukt dit allemaal netjes, ook om er voor te zorgen dat de URL's SEO vriendelijk zijn (www.webshop.nl/Categorie/Subcategorie/Product.html ipv ?cat=223&subcat=456&productid=9876).
De categorie tabel heb ik hiervoor aangepast door een extra kolom parentid toe te voegen, welke refereerd naar een bovenliggende categorie, of een 0 als dit de hoofdcategorie is. Ook dit werkt perfect.
Nu wil het geval dat op de nieuw te bouwen 'grote' webshop bepaalde producten in meer dan 1 categorie kan voorkomen, en hier zit het probleem. Ik heb bijvoorbeeld een spotlight met de Top 10 best verkochte producten. Deze Top 10 wordt elke nacht met een ranking geupdate om op te ordenen met een door ons gemaakt algoritme wat in het product-tabel wordt opgeslagen, of het overzicht van het winkelwagentje.
Omdat het product in meerdere categorieen voorkomt, wordt het product ook 2x in de Top 10 gezet, met zoals verwacht linken naar de verschillende categorieen.
Nu heb ik geprobeerd om via een GROUP BY methode alle data te groeperen en via bijvoorbeeld MAX de hoogste data uit de database te halen. Echter er vinden diverse zaken in de SELECT statement plaats om bijvoorbeeld de URL opbouw te definieren, en dat lukt me niet met de GROUP BY methoden.
Ik dacht slim te zijn om een vieuw te maken welke alle filter en sorteringen maakt, en alleen een ProductId uitgeeft die DISTINCT is, dus allemaal uniek. Dit lukt prima en krijg een mooie lijst met unieke ProductId's terug.
Echter als ik deze via een andere view wil koppelen aan een ander tabel of view om alle data eruit te halen (productnaam, categorienaam, subcategorie, URL's, etc.) krijg ik de fout:
Het lijkt erop dat SQL Server de beide vieuws 'uit elkaar' haalt en als een nieuwe vieuw uitvoert op de database, echter is dit niet mijn bedoeling.
Hoe kan ik ervoor zorgen, dat ik alleen het unieke ProductID van de ene vieuw kan JOINEN met een andere vieuw/tabellen/etc.
Omdat alles zeer complex is, zal ik hier geen voorbeeld query's neerzetten, maar als dit toch wenselijk is, hoor ik het wel.
De categorie tabel heb ik hiervoor aangepast door een extra kolom parentid toe te voegen, welke refereerd naar een bovenliggende categorie, of een 0 als dit de hoofdcategorie is. Ook dit werkt perfect.
Nu wil het geval dat op de nieuw te bouwen 'grote' webshop bepaalde producten in meer dan 1 categorie kan voorkomen, en hier zit het probleem. Ik heb bijvoorbeeld een spotlight met de Top 10 best verkochte producten. Deze Top 10 wordt elke nacht met een ranking geupdate om op te ordenen met een door ons gemaakt algoritme wat in het product-tabel wordt opgeslagen, of het overzicht van het winkelwagentje.
Omdat het product in meerdere categorieen voorkomt, wordt het product ook 2x in de Top 10 gezet, met zoals verwacht linken naar de verschillende categorieen.
Nu heb ik geprobeerd om via een GROUP BY methode alle data te groeperen en via bijvoorbeeld MAX de hoogste data uit de database te halen. Echter er vinden diverse zaken in de SELECT statement plaats om bijvoorbeeld de URL opbouw te definieren, en dat lukt me niet met de GROUP BY methoden.
Ik dacht slim te zijn om een vieuw te maken welke alle filter en sorteringen maakt, en alleen een ProductId uitgeeft die DISTINCT is, dus allemaal uniek. Dit lukt prima en krijg een mooie lijst met unieke ProductId's terug.
Echter als ik deze via een andere view wil koppelen aan een ander tabel of view om alle data eruit te halen (productnaam, categorienaam, subcategorie, URL's, etc.) krijg ik de fout:
code:
1
| Error Message: The text, ntext, or image data type cannot be selected as DISTINCT |
Het lijkt erop dat SQL Server de beide vieuws 'uit elkaar' haalt en als een nieuwe vieuw uitvoert op de database, echter is dit niet mijn bedoeling.
Hoe kan ik ervoor zorgen, dat ik alleen het unieke ProductID van de ene vieuw kan JOINEN met een andere vieuw/tabellen/etc.
Omdat alles zeer complex is, zal ik hier geen voorbeeld query's neerzetten, maar als dit toch wenselijk is, hoor ik het wel.
Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!