Ik ben bezig met het maken van een query voor een voorraad beheer systeem. Daarbij wil ik eerst een product kunnen pakken met alle bijhorende opties. Helaas heb ik zelf het systeem en database niet ontwikkeld waardoor er een aantal onhandige dingen in staan.
Ik zal even simpel proberen uit te leggen hoe de producten in de database staan opgeslagen:
Products: ProductID, ProductName
Groups: GroupID, GroupParentID, GroupName
Options: OptionID, OptionName, ProductID
GroupProduct: GroupID, ProductID
Even ter toelichting, in groups worden categorieën opgeslagen zoals Leer AB, Leer AC, daaronder komen kleuren te staan waarbij de GroupID van Leer AB als GroupParentID wordt gebruikt. In options staan eventuele extra opties die een klant zou kunnen hebben bij een product zoals een metalen poot bij een meubel. Het laatste lijkt mij duidelijk, dat is dus de koppeling van een groep en een product.
Wat ik nu wil doen is op basis van een Product ID het volgende tonen:
ProductID, ProductName, GroupID, GroupName, GroupID (KleurID), GroupName (KleurName), OptionID, OptionName
In geval van twee groups, vijf kleuren per groep zou dat dus 10 regels moeten opleveren. En dit gebeurt nu ook aan de hand van de volgende query die ik heb geschreven:
Dit werkt prima, alleen wil ik nu ook de meerprijs ermee toevoegen die opgeslagen staat in Options. Wat het probleem nu is, is dat een product ook geen meerprijs kan hebben. Op het moment dat ik een left join doe met meerprijs komt dat er dus een meerprijs bij te staan, maar dan zou ik graag ook nog een standaard versie willen tonen als OptionID NULL zal hebben. Ik weet dat ik dit via PHP kan doen, maar ik vroeg mij af of dit ook mogelijk is met SQL? Dan zou ik dus ipv 10 regels, 20 regels moeten krijgen waarbij alles wordt herhaal maar met een OptionID van NULL.
Ik zal even simpel proberen uit te leggen hoe de producten in de database staan opgeslagen:
Products: ProductID, ProductName
Groups: GroupID, GroupParentID, GroupName
Options: OptionID, OptionName, ProductID
GroupProduct: GroupID, ProductID
Even ter toelichting, in groups worden categorieën opgeslagen zoals Leer AB, Leer AC, daaronder komen kleuren te staan waarbij de GroupID van Leer AB als GroupParentID wordt gebruikt. In options staan eventuele extra opties die een klant zou kunnen hebben bij een product zoals een metalen poot bij een meubel. Het laatste lijkt mij duidelijk, dat is dus de koppeling van een groep en een product.
Wat ik nu wil doen is op basis van een Product ID het volgende tonen:
ProductID, ProductName, GroupID, GroupName, GroupID (KleurID), GroupName (KleurName), OptionID, OptionName
In geval van twee groups, vijf kleuren per groep zou dat dus 10 regels moeten opleveren. En dit gebeurt nu ook aan de hand van de volgende query die ik heb geschreven:
SQL:
1
2
3
4
5
6
| SELECT g.GroupID, g.GroupName, k.GroupID AS KleurID, k.GroupName AS Kleur, gp.ProductID, gp.ProductNaam FROM Groups AS k LEFT JOIN Groups AS g ON g.GroupID = k.GroupParentID LEFT JOIN GroupProduct AS gp ON gp.GroepID = k.GroupParentID LEFT JOIN Products AS p ON p.ProductID = gp.ProductID WHERE p.ProductID = 321 |
Dit werkt prima, alleen wil ik nu ook de meerprijs ermee toevoegen die opgeslagen staat in Options. Wat het probleem nu is, is dat een product ook geen meerprijs kan hebben. Op het moment dat ik een left join doe met meerprijs komt dat er dus een meerprijs bij te staan, maar dan zou ik graag ook nog een standaard versie willen tonen als OptionID NULL zal hebben. Ik weet dat ik dit via PHP kan doen, maar ik vroeg mij af of dit ook mogelijk is met SQL? Dan zou ik dus ipv 10 regels, 20 regels moeten krijgen waarbij alles wordt herhaal maar met een OptionID van NULL.