Ik ben aan het stoeien met CROSS JOIN / Carthesisch query's (Programming FAQ - SQL) om een bepaald product te koppelen aan diverse (onbeperkte) productopties met haar eigen artikelnummers en prijzen.
Wat heb ik? Ik heb een tabel Producten, ProductOpties en ProductOptieWaardes Uiteraard bevat de tabel Producten alle producten uit de webshop. De ProductOpties bevat 2 kolommen, één Id kolom en een Naam. Deze kolom gebruik ik om diverse 'soorten' productopties aan te geven (kleur, afmeting, BH maat, etc.). En aan deze kolom hangt weer de ProductOptieWaardes welke uiteraard een eigen Id, en een ProductOptieId heeft, en een eigen naam. Zo kan je dus onder de ProductOptie kleur diverse kleuren opslaan.
Tabel Producten:
Tabel ProductOpties:
Tabel ProductOptieWaardes:
Nu is het dus de bedoeling dat ik aan een Product (ProductId) een mix van bovenstaande ProductOpties kan toevoegen. Ik kan eigenlijk heel simpel een correct lijst middel CROSS JOIN aan elkaar knopen van de beschikbare productopties en deze netjes als een 'matrix' laten vertonen op de website:
Hieruit krijgen we dan een prachtig tabel:
Met bovenstaand resultaat kan je dus zo met ASP een prachtige matrix maken met bovenstaande combinatiemogelijkheden. Aan deze combinatie wil ik dus een aantal variabelen in opslaan. Dus bijvoorbeeld XS, Blauw, Korte mouw heeft artikelnummer 10002 en heeft een prijscorrectie van € 1,00 vergeleken met het 'moeder'-product (tabel Producten), en een checkbox wel/niet voorraad/bestelbaar.
Tot zover ben ik gekomen, alleen kom ik er absoluut niet meer uit als ik bovenstaand formulier weer wil opslaan in de database en te koppelen aan een ProductId. Het is de bedoeling dat je aan elk artikel onbeperkt opties kan koppelen, en uiteraard elk product kan weer andere ProductOpties koppelingen hebben.
Eerst had ik in gedachte om een koppeltabel te maken met daarin ProductId en daarnaast een legio aan kolommen waar ik de eventuele ProductOptieWaardeId in op kan slaan met de daarbij behorende variabelen.
Echter ben je hier dus altijd gelimiteerd aan het aantal kolommen dat je toevoegd, en het lijkt me ook niet echt database logisch om het op deze manier aan te pakken.
Ook heb ik laatst een mooie parent/child oplossing gemaakt om een onbeperkte categoriestructuur te kunnen creeëren, maar dit lijkt me niet echt handig voor deze oplossing en kost aardig wat performance van ASP om hier een nette 'structuur' van te maken en dus niet geschikt.
Heeft er iemand een idee hoe je dit nou mooi in het vat/database moet gieten?
Wat heb ik? Ik heb een tabel Producten, ProductOpties en ProductOptieWaardes Uiteraard bevat de tabel Producten alle producten uit de webshop. De ProductOpties bevat 2 kolommen, één Id kolom en een Naam. Deze kolom gebruik ik om diverse 'soorten' productopties aan te geven (kleur, afmeting, BH maat, etc.). En aan deze kolom hangt weer de ProductOptieWaardes welke uiteraard een eigen Id, en een ProductOptieId heeft, en een eigen naam. Zo kan je dus onder de ProductOptie kleur diverse kleuren opslaan.
Tabel Producten:
| ProductId | ProductNaam | ProductArtikelNummer | ProductPrijs |
| 1 | Shirt diverse maten en kleuren | 100001 | 25,00 |
Tabel ProductOpties:
| ProductOptieId | ProductNaam |
| 1 | Maat |
| 5 | Kleur |
| 7 | Uitvoering |
Tabel ProductOptieWaardes:
| ProductOptieWaardeId | ProductOptieId | ProductOptieNaam |
| 1 | 1 | XXS |
| 2 | 1 | XS |
| 3 | 1 | S |
| 4 | 5 | Zwart |
| 5 | 5 | Wit |
| 6 | 5 | Blauw |
| 7 | 7 | Korte mouw |
| 8 | 7 | Lange mouw |
Nu is het dus de bedoeling dat ik aan een Product (ProductId) een mix van bovenstaande ProductOpties kan toevoegen. Ik kan eigenlijk heel simpel een correct lijst middel CROSS JOIN aan elkaar knopen van de beschikbare productopties en deze netjes als een 'matrix' laten vertonen op de website:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| SELECT Maat.ProductOptieNaam AS nMaat, Maat.ProductOptieWaardeId AS iMaat, Kleur.ProductOptieNaam AS nKleur, Kleur.ProductOptieWaardeId AS iKleur, Uitvoering.ProductOptieNaam AS nUitvoering, Uitvoering.ProductOptieWaardeId AS iUitvoering FROM ProductOptieWaardes AS Maat CROSS JOIN ProductOptieWaardes AS Kleur CROSS JOIN ProductOptieWaardes AS Uitvoering WHERE Maat.ProductOptieId = 1 AND Kleur.ProductOptieId = 5 AND Uitvoering.ProductOptieId = 7 ORDER BY iMaat, iKleur, iUitvoering |
Hieruit krijgen we dan een prachtig tabel:
| nMaat | iMaat | nKleur | iKleur | nUitvoering | iUitvoering |
| XXS | 1 | Zwart | 4 | Korte mouw | 7 |
| XXS | 1 | Zwart | 4 | Lange mouw | 8 |
| XXS | 1 | Wit | 5 | Korte mouw | 7 |
| XXS | 1 | Wit | 5 | Lange mouw | 8 |
| XXS | 1 | Blauw | 6 | Korte mouw | 7 |
| XXS | 1 | Blauw | 6 | Lange mouw | 8 |
| XS | 2 | Zwart | 4 | Korte mouw | 7 |
| XS | 2 | Zwart | 4 | Lange mouw | 8 |
| XS | 2 | Wit | 5 | Korte mouw | 7 |
| XS | 2 | Wit | 5 | Lange mouw | 8 |
| XS | 2 | Blauw | 6 | Korte mouw | 7 |
| XS | 2 | Blauw | 6 | Lange mouw | 8 |
| S | 3 | Zwart | 4 | Korte mouw | 7 |
| S | 3 | Zwart | 4 | Lange mouw | 8 |
| S | 3 | Wit | 5 | Korte mouw | 7 |
| S | 3 | Wit | 5 | Lange mouw | 8 |
| S | 3 | Blauw | 6 | Korte mouw | 7 |
| S | 3 | Blauw | 6 | Lange mouw | 8 |
Met bovenstaand resultaat kan je dus zo met ASP een prachtige matrix maken met bovenstaande combinatiemogelijkheden. Aan deze combinatie wil ik dus een aantal variabelen in opslaan. Dus bijvoorbeeld XS, Blauw, Korte mouw heeft artikelnummer 10002 en heeft een prijscorrectie van € 1,00 vergeleken met het 'moeder'-product (tabel Producten), en een checkbox wel/niet voorraad/bestelbaar.
Tot zover ben ik gekomen, alleen kom ik er absoluut niet meer uit als ik bovenstaand formulier weer wil opslaan in de database en te koppelen aan een ProductId. Het is de bedoeling dat je aan elk artikel onbeperkt opties kan koppelen, en uiteraard elk product kan weer andere ProductOpties koppelingen hebben.
Eerst had ik in gedachte om een koppeltabel te maken met daarin ProductId en daarnaast een legio aan kolommen waar ik de eventuele ProductOptieWaardeId in op kan slaan met de daarbij behorende variabelen.
Echter ben je hier dus altijd gelimiteerd aan het aantal kolommen dat je toevoegd, en het lijkt me ook niet echt database logisch om het op deze manier aan te pakken.
Ook heb ik laatst een mooie parent/child oplossing gemaakt om een onbeperkte categoriestructuur te kunnen creeëren, maar dit lijkt me niet echt handig voor deze oplossing en kost aardig wat performance van ASP om hier een nette 'structuur' van te maken en dus niet geschikt.
Heeft er iemand een idee hoe je dit nou mooi in het vat/database moet gieten?
[ Voor 0% gewijzigd door Polderdijk op 29-05-2008 11:54 . Reden: JOIN Inhoud naar Uitvoering aangepast ]
Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!