webForumDet fria alternativet

Krånglig relation

12 svar · 290 visningar · startad av ekke_t

ekke_tMedlem sedan juli 2001198 inlägg
#1

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
#2

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
#3

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
#4

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
#5

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
#6

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
#7

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
#8

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
#9

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
#10

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
#11

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
#12

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
#13

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...

Genererad på 368 ms · cache AV · v20260730165559-full.f96bc7eb