ekke_tMedlem sedan juli 2001198 inlägg
Tjena!
Jag håller på att lägga in lite funktioner i en befintlig shop-webbapplikation.
I den befintliga shopen är produkterna lagrade på ett lite speciellt sätt. Varje produkt kan vara kopplad till noll eller flera produktgrupper (typ färg, eller storlek) och varje grupp kan vara kopplad till en eller flera typer (t.ex. olika färger eller storlekar).
Så varje produkt finns alltså i flera varianter.
T.ex. Tröja - Röd - S och Tröja - Svart - M etc.
Så långt allt väl... nu till problemet
Jag har fått i uppdrag att utveckla shopen så att man kan ha lagerstatus på alla varianter av produkter. Är inte produkten kopplad till någon grupp är ju detta inget problem, men så fort som en eller ännu värre flera grupper är kopplade till en produkt så blir det otroligt krångligt... så krångligt att jag inte på ett antal timmar kommit på någon vettig lösning.
Så nu undrar jag om någon av er snillen och hjälpsamma människor har något förslag på en lösning.
Databasdesignen ser ut typ så här:
tblProduct:
intId
strName
strDescription
strImage
tblGroup:
intId
strName
tblType:
intId
strName
tblPro_Link_Grp:
intId_pro
intId_grp
tblGrp_Link_Typ:
intId_grp
intId_typ
Engine^Medlem sedan dec. 20002 861 inlägg
Jag vet inte riktigt vad det är du vill ha ut, men det här kan vara en början ivarjefall.
SELECT tblP.strName, strDescription, tblG.strName, tblT.strName
FROM tblProduct tblP
LEFT JOIN tblGroup tblG
ON tblG.intId = tblP.intId
LEFT JOIN tblType tblT
ON tblT.intId = tblP.intId
GROUP BY tblP.strName, strDescription, tblG.strName, tblT.strName
ekke_tMedlem sedan juli 2001198 inlägg
hmmm... problemet jag har är inte att jag inte kan plocka ut den befintliga datan om produkterna... utan hur jag ska lösa problemet med att lagra lagerstatusen för alla varianter av produkterna...
Dessutom tror jag inte att den SQL-fråga du föreslog får ut något vettigt eftersom du joinat ihop tabellerna på deras egna unika id som inte på något sätt är korrelerade.
Engine^Medlem sedan dec. 20002 861 inlägg
Ok... då begrep jag genast att dom två andra tabellerna var relationstabeller.
Lagra lagerstatus? Jag antar att du menar att du vill visa hur många av varje typ det finns i lager...
SELECT tblP.strName, tblG.strName, tblT.strName, Count(*) AS intAntalILager
FROM (((tblProduct tblP
INNER JOIN tblPro_Link_Grp tblPLG
ON tblPLG.intId_pro = tblP.intId)
INNER JOIN tblGroup tblG
ON tblG.intId = tblPLg.intId_grp)
INNER JOIN tblGrp_Link_Type tblGLT
ON tblGLT.intId_typ = tblG.intId)
INNER JOIN tblType tblT
ON tblT.intId = tblGLT.intId_typ
GROUP BY tblP.strName, tblG.strName, tblT.strName
Nu känns det som om jag har gjort något fel här ändå, men det kan ju vara värt att testa det ändå ;)
ekke_tMedlem sedan juli 2001198 inlägg
Jo... det där hade ju fungerat om varje produkt i lager hade en egen rad i tabellen... men så är det ju inte, utan varje produkt har endast en rad. Det jag vill åt är att någonstans lagra ett unikt värde på lagerstatusen för varje variant av produkterna.
Engine^Medlem sedan dec. 20002 861 inlägg
Nu börjar jag känna mig förvirrad, lagra ett unikt värde på lagerstatusen? Det känns som om du ska börja med att göra en INNER JOIN på dom två relationstabellerna och sedan göra LEFT JOIN på det resultatet med dom tre övriga tabellerna.
Jag skulle nog vilja sitta och leka med lite data innan jag trasslar in mig själv mer i det här :OO
ekke_tMedlem sedan juli 2001198 inlägg
Bara för att förtydliga... jag behöver ingen hjälp med att plocka ut den data som finns i tabellerna...
Det jag vill ha hjälp med är att få fram en design av en ny relation för att kunna lagra ett värde på lagerstatusen för varje unik variant av produkterna...
Engine^Medlem sedan dec. 20002 861 inlägg
Den relationen bör ju då rent logiskt bestå av tblProduct.intId, tblGrupp.intId och tblType.intId, men då känns det som om jag missar något annat relevant.
tblLagerStatus
intId_pro (FK tblProduct)
intId_grp (FK tblGroup)
intId_typ (FK tblType)
intLagerStatus
ekke_tMedlem sedan juli 2001198 inlägg
jo... precis så tänkte jag från början... men det funkar ju inte eftersom en produkt kan vara kopplad till fler än en grupp och då vill jag ha lagerstatusen för varje unik variant...
Exempelvis... Vi har produkten "Tröja" och Grupperna "Färg" och "Storlek". Till gruppen "Färg" är typerna "Svart", "Vit" och "Röd" kopplade och till gruppen "Storlek" är typerna "S", "M" och "L" kopplade...
Med din relation skulle lagerstatus sparas för t.ex.
Tröja - Färg - Vit
Tröja - Storlek - S
osv
Men jag vill ha det så här:
Tröja - Färg - Vit - Storlek - S
Tröja - Färg - Vit - Storlek - M
osv
Detta blir ju så klart ännu värre om man har fler än 2 grupper till varje produkt...
Engine^Medlem sedan dec. 20002 861 inlägg
Jaha... då förstår jag ditt dilemma. ;)
Jag skulle vilja säga att du har lagt upp det här med grupper och typ lite bökigt. Själv skulle jag ha splittat upp tabellerna istället för att pyssla med relationerna som du gör och således skulle jag aldrig fått bekymret med att en tröja kan ingå i olika grupper.
Men det ska väl inte vara några problem att lösa ändå, eftersom du har ju faktiskt den informationen i dina relationstabeller.
tblLagerStatus
lngCounter (PK - Autonumber)
intId_pro (tblProduct)
intId_grp (tblPro_Link_Grp)
intId_typ (tblGrp_Link_Typ)
intLagerStatus
Så tror jag att det kan bli, men jag känner inte att jag har tungan rätt i mun. Jag tänkte först sitta med papper och penna ett tag, men jag måste ju faktiskt jobba lite också ;)
ekke_tMedlem sedan juli 2001198 inlägg
Jag ser inte hur denna "nya" lösning skiljer sig från den du föreslog nyss... det är väl fortfarande samma problem som jag beskrev i mitt senaste inlägg...
aasahMedlem sedan mars 20033 451 inlägg
ekke_t skrev:
...Men jag vill ha det så här:
Tröja - Färg - Vit - Storlek - S
Tröja - Färg - Vit - Storlek - M
osv
Detta blir ju så klart ännu värre om man har fler än 2 grupper till varje produkt...
Umm, varför? :q Räcker inte:
Tröja - Vit - S
Tröja - Vit - M
Att det är färg och storlek är väl uppenbart? :q
ekke_tMedlem sedan juli 2001198 inlägg
Jo det är klart att det räcker... det är så jag har löst det hela nu också... dock kom jag inte på hur man skulle lösa det med en relation utan jag löste det med en sträng som ligger på varje produkt som innehåller datan om alla kombinationer av typer och dess lagerstatus...
Jag vet att det är en ful-lösning... men det funkar...