webForumDet fria alternativet

webshop > färger och storlekar?

ASP

17 svar · 1 755 visningar · startad av cyeclone

Medlem sedan dec. 2004143 inlägg
Frågan#1

Hejsan, har nu kommit en bit på min webshop, nu hade jag tänkt att försöka fixa så att använderen av sidan ska kunna välja en färg och storlek på den valda kategorien.

Undrar nu om ni har något förslag på hur man kan fixa detta på enklaste sätt, jag tänkte:
Om man som admin kan kryssa i rutor för de storlekar som finns, och för de färger som finns, sedan skickas det till "produkter" i databasen.
När sedan användaren kollar på produkten så finns dom valen som administratören kyrssade i.

Fast med detta förslag så kommer det att bli en massa kolumner i databasen.

Vet ni något enklare sätt för detta?

Medlem sedan nov. 20017 144 inlägg
#2

Du skulle kunna skapa en tabell som hanterar typ av version
ex. storlek, färg, modell osv.

[TYP]
----------------
Id|descr
----------------
1 | Storlek
2 | Färg
3 | Modell

En tabell som har alla versionerna med det relaterade TYPid:t
ex. S,M,XL,Röd osv.

[VERSION]
-------------------------
Id|TId|descr
-------------------------
1 | 1 | Small
2 | 1 | Medium
3 | 1 | Extra Large
4 | 2 | Röd
5 | 2 | Svart
6 | 2 | Flerfärgad
7 | 3 | Old style

Sedan en tabell som parar ihop aktuell vara med en eventuellt version/storlek eller färg.

[PRODUKT-TYP]
pId|tId
1|2
2|1
3|2
3|3

[PRODUKT]
------------
Id | Desc
------------
1 | Stol
2 | T-tröjja
3 | Damcyckel

Detta gör att du kan ha flera olika versioner på en och samma produkt. I detta fall så har te.x. produkten "stol" endast färg och tröjjan endast storlek som alternativ medans Damcykeln har både färg och modell.

Eventuellt så kanske du behöver ha olika priser för olika modeller. Då kan du kanske lägga till en egen priskolumn i tablellen [VERSION]. Men då måste man tänka till hur man gör om man har fler versionsmöjligheter. :)

Medlem sedan feb. 20034 441 inlägg
#3

Nu drar jag upp en gammal tråd här igen men hoppas på att kunna få lite hjälp.
Håller på med en webbshop och har stött på lite problem när det gäller det här med färger / storlekar.
Har sökt och sett att det finns en del ang. det här, men är inte riktigt med i matchen. Skulle vara kanon om något kunde förklara lite om sättet ovan är bra, eller om det finns bättre lösningar.
Min webbshop kommer innehålla mest kläder och det är endast storlek och färg som är aktuellt för min del, men förstår som sagt inte alls hur jag ska lösa det rent kodmässigt.

De här varorna kommer att säljas i shoppen till att börja med:

[b]Produkt			Pris		Storlek[/b]
Klubboverall		600kr		156, 176, XS, S , M, L, XL
Huvtröja 		299kr		XS, S, M, L , XL	
T-shirt Röd Herr	99kr		S, M, L , XL
T-shirt Röd Dam		149kr		S, M, L , XL
T-shirt Röd Barn	65kr		90, 120, 140, 160
T-shirt Vit  Barn	50kr		90, 120, 140
Piké Röd Herr		159kr		S, M, L , XL
Piké Röd Dam		159kr		S, M, L , XL
Piké Röd Barn		119kr		S, M, L , XL
Badmössa		90kr	
Simglasögon		40kr - 150kr
Solskärm		50kr

Om man tex. kollar på T-Shirt så vore det trevligt om det bara var en vara (T-Shirt) och sen valde man barn / herr / dam och färg, och sedan hämtas det rätta priset till den "version" man valt.

Det står helt still i huvudet, så jag vet inte alls hur jag ska lösa det.

Alla förslag välkomnas, tack!

Medlem sedan maj 20018 027 inlägg
#4

MickeA.com skrev:

Skulle vara kanon om något kunde förklara lite om sättet ovan är bra, eller om det finns bättre lösningar.

Själv tycker jag det beskrivna sättet ser ganska förvirrat ut. Möjligt att det funkar. Det kan jag inte avgöra, då jag inte förstår tankegången. Själv skulle jag snarare välja att ha tabeller för de egenskaper som man är intresserad av; en produkttabell, en storlekstabell, en färgtabell, etc. Eftersom en produkt kan finnas i flera storlekar och färger, samt att en färg respektive storlek, kan gälla för många produkter, har vi många-till-många-relationer mellan produkterna och deras egenskaper. Alltså behövs kopplingstabeller mellan produkttabellen och egenskapstabellerna.

Exempel:

Produkt
ID     Namn              Pris
1      Klubboverall      600
2      Huvtröja            299

Storlek
ID     Namn
1       XS
2       S
3       M
4       L
5       XL

Färg
ID      Namn
1        Röd
2        Vit
3        Svart
4        Blå
5        Grön

Kopplingstabeller:

Produkt_Storlek
PID       SID
1           1
1           2
1           3
1           4
1           5
2           1
2           2
2           3
2           4
2           5

Produkt_Färg
PID       FID
1           1
1           2
2           1

Nu följer ovanstående inte exakt det utbud du har angett nedan. Jag såg sedan också att du tydligen har olika priser på en och samma produkt när det gäller t-shirts. Då kan det vara bra att ha en separat pristabell också. Tankegången är i så fall densamma. Har vi en många-till-många-relation? I så fall, ha en kopplingstabell mellan. Annars kan du ha pris-ID som en egen kolumn i produkttabellen, eller ange priset rakt av i produkttabellen.

Medlem sedan feb. 20034 441 inlägg
#5

Tack för ett snabbt svar.
Jag håller med dig, förstår inte heller tankegången på koden längst upp i tråden.
Din kod ovan därimot gör det hela lite klarare.

Eftersom priserna skiljer sig beroende på om det är Herr, dam eller barn kanske jag ska göra det lätt för mig, att man få lägga till tre produkter:

T-Shirt Barn
T-Shirt Dam
T-Shirt Herr

Då kan jag sedan styra färger / storlekar enl. din modell med fortf. få "rätt" pris oavsett vilken kombination man väljer.

Ska testa lite, återkommer, tack sålänge!

/r
Såg precis ovan att T-Shirt Barn Vit / Röd skiljer sig i pris, då faller min idé.
Förslag?

Medlem sedan nov. 20017 144 inlägg
#6

Lustigt, det känns som om att UlfT och min struktur inte är så väldigt olika.
En tabell med produkter, en med modeller och en som parar ihop dem...

MickeA.com skrev:

/r
Såg precis ovan att T-Shirt Barn Vit / Röd skiljer sig i pris, då faller min idé.
Förslag?

Jag själv skrev:

Eventuellt så kanske du behöver ha olika priser för olika modeller. Då kan du kanske lägga till en egen priskolumn i tablellen [VERSION]. Men då måste man tänka till hur man gör om man har fler versionsmöjligheter.

Medlem sedan feb. 20034 441 inlägg
#7

Jesper T skrev:

Lustigt, det känns som om att UlfT och min struktur inte är så väldigt olika.
En tabell med produkter, en med modeller och en som parar ihop dem...

Jo, det stämmer, i mitt fall förstod jag nästan inget alls när jag läste din tråd. Kanske kan ha med att göra att du skrivit på ett annorlunda sätt.
Men såhär i efterhand när jag gjort enl. din och UlfT's modell, så är det på liknande sätt.

Tack!

Medlem sedan feb. 20034 441 inlägg
#8

Tjaba

Nu har det kört ihop sig lite.
Håller på med sidan där man ska kunna välja vilja storlekar en viss produkt ska ha.
Tanken är att skriv ut alla storlekar som finns och sedan bocka i dom som redan är valda.
Problemet är att ingen checkbox bockas i vid utskriften:

prodId = Request.Querystring("prodId")
		If isNumeric(prodId) Then
			prodId = cInt(prodId)
			openDB("def")
			sSql =	"SELECT pairProdId, pairSizeId, sizeId, sizeName, sizeOrder " &_
				"FROM tbl_shopSizeRelate sSr INNER JOIN tbl_shopSize sS " &_
				"ON sSr.pairSizeId = sS.sizeId " &_
				"ORDER BY sizeOrder ASC"
			Set rs = oConn.Execute(sSql)
			If Not rs.EOF Then
				Response.Write(	"<table cellpadding=""0"" cellspacing=""0"" style=""width: 200px;"">" & VbCrLf &_
						"<tr>" & VbCrLf &_
						"<td class=""table_top padall"">Storlekar</td>" & VbCrLf &_
						"</tr>" & VbCrLf)
				While Not rs.EOF
					If prodId = cInt(rs("pairProdId")) Then
						strCheck = " checked=""checked"""
					Else
						strCheck = ""
					End If
					If i Mod 2 = 0 Then bgC = "one" Else bgC = "two" End If
					Response.Write(	"<tr class=""" & bgC & """>" & VbCrLf &_
							"<td class=""bTxt""><input type=""checkbox"" name=""size_" & rs("sizeId") & """" & strCheck & ">&nbsp;" & rs("sizeName") & "</td>" & VbCrLf &_
							"</tr>" & VbCrLf)
				i = i + 1
				rs.MoveNext
				Wend
				Response.Write("</table>" & VbCrLf)
			End If
		End If

Kan jag lösa det på det här sättet, eller finns det något annat?

Tack på förhand!

Medlem sedan jan. 20022 440 inlägg
#9
If cInt(prodId) = cInt(rs("pairProdId")) Then
  strCheck = " checked=""checked"""
Else
  strCheck = ""
End If

Jag hade problem som du tidigare för mig hjälpte det att använda CInt inne i själva loopen annars blev det inte sant att de var lika. Eller har jag missförstått frågan?

Medlem sedan feb. 20034 441 inlägg
#10

Nu har jag fått det att funka.
Det hela berodde på slarv från mig, hade valt en produkt utan några poster i tabellen nämnd ovan.

Har därimot ett problem nu.
Jag vill ju att alla poster i tbl_shopSize ska plockas ut och sen ska de som även finns i tbl_shopSizeRelate bli ibockade.

Som det är nu så plockas endast de som finns i tbl_shopSizeRelate ut, vilket är helt fel.
Tanken med det här är ju att man ska kunna bocka i / bocka ur storlekar som tex. tillfälligt tagit slut.

Hur ska jag lösa det här?

Tack på förhand!

Medlem sedan jan. 20022 440 inlägg
#11

Om du vill att alla poster i den andra tabellen ska skrivas ut även om de inte matchar den första tabellen ska du använda dig av RIGHT JOIN. INNER JOIN plockar bara fram de poster där de båda matchande fälten är lika.

LEFT JOIN gör då motsatsen till RIGHT JOIN. Den plockar ut alla poster från den första tabellen och bara de från den andra där de båda matchade fälten är lika!

SQL = " SELECT pairProdId, pairSizeId, sizeId, sizeName, sizeOrder " &_
			" FROM tbl_shopSizeRelate sSr RIGHT JOIN tbl_shopSize sS " &_
			" ON sSr.pairSizeId = sS.sizeId " &_
			" ORDER BY sizeOrder ASC "
Set rs = oConn.Execute(sSql)

http://www.w3schools.com/sql/sql_join.asp

Den där förklaringen borde jag få pris för, nästan i klass med något @nders eller LarsG kunde ha vräkt ur sig på den gamla goda tiden :)

Medlem sedan feb. 20034 441 inlägg
#12

Det där ser ju lovande ut, måste testa när jag kommer hem i eftermiddag.
Tack så mycket sålänge!

Medlem sedan feb. 20034 441 inlägg
#13

Till en början funkade det jättebra, RIGHT JOIN plockar ut det jag vill, men lite för mycket.
Testade precis fram och tillbaks och det funkade kanon ända tills jag lade till storlekar för två produkter.
Den då ut allt dubbelt, alltså ALLA poster som finns i tabellen tbl_shopSizeRelate.
Min tanke är att alla storlekar som finns i tbl_shopSize skall plockas ut och de poster där sizeId = pairSizeId ska redan vara ibockade.

Såhär har jag gjort:

' // ADMINISTRERA STORLEKAR
If Request.Querystring("do") = "admSize" Then
	prodId = Request.Querystring("prodId")
	If isNumeric(prodId) Then
		prodId = cInt(prodId)
		openDB("def")
		sSql =	"SELECT pairSize, pairProdId, pairSizeId, sizeId, sizeName, sizeOrder " &_
			"FROM tbl_shopSizeRelate sSr RIGHT JOIN tbl_shopSize sS " &_
			"ON sSr.pairSizeId = sS.sizeId " &_
			"ORDER BY sizeOrder ASC"
		Set rs = oConn.Execute(sSql)
		If Not rs.EOF Then
			Set rs1 = oConn.Execute("SELECT artNum, prodName FROM tbl_shopProd WHERE prodId = " & prodId)
			If Not rs1.EOF Then str = "<b>'" & rs1("prodName") & "'</b><br>med artikelnummer <b>'" & rs1("artNum") & "'</b>" End If
			Set rs1 = Nothing

			Response.Write(	"<form action=""?do=updSize"" method=""post"">" & VbCrLf &_
					"<table cellpadding=""0"" cellspacing=""0"" style=""width: 200px;"">" & VbCrLf &_
					"<tr>" & VbCrLf &_
					"<td class=""table_top padall"">Produkt</td>" & VbCrLf &_
					"</tr>" & VbCrLf &_
					"<tr>" & VbCrLf &_
					"<td class=""bTxt padall"" style=""padding-bottom: 10px;"">" & str & "</td>" & VbCrLf &_
					"</tr>" & VbCrLf &_
					"<tr>" & VbCrLf &_
					"<td class=""table_top padall"">Storlekar</td>" & VbCrLf &_
					"</tr>" & VbCrLf)
			While Not rs.EOF
				If prodId = rs("pairProdId") Then
					strCheck = " checked=""checked"""
				Else
					strCheck = ""
				End If
				If i Mod 2 = 0 Then bgC = "one" Else bgC = "two" End If
				Response.Write(	"<tr class=""" & bgC & """>" & VbCrLf &_
						"<td class=""bTxt""><input type=""hidden"" name=""postId"" value=""" & rs("sizeId") & """><input type=""checkbox"" name=""size_" & rs("sizeId") & """" & strCheck & ">&nbsp;" & rs("sizeName") & "</td>" & VbCrLf &_
						"</tr>" & VbCrLf)
			i = i + 1
			rs.MoveNext
			Wend
			Response.Write(	"<tr>" & VbCrLf &_
					"<td class=""bTxt"" style=""padding-top: 20px;"">" &_
					"<input type=""hidden"" name=""prodId"" value=""" & prodId & """>" &_
					"<input type=""submit"" value=""Uppdatera"" class=""btn"">" &_
					"</td>" & VbCrLf &_
					"</tr>" & VbCrLf &_
					"</table>" & VbCrLf &_
					"</form>")
		End If
	End If

' // ADMINISTRERA STORLEKAR
ElseIf Request.Querystring("do") = "updSize" Then
	prodId = Request.Form("prodId")
	openDB("def")
	For Each postId In Request.Form("postId")	
		pairSize = Request.Form("size_" & postId)
		If pairSize = "on" Then
			Set rs = oConn.Execute("SELECT pairSize, pairProdId, pairSizeId FROM tbl_shopSizeRelate WHERE pairProdId = " & prodId & " AND pairSizeId = " & postId)
			If rs.EOF Then
				oConn.Execute("INSERT INTO tbl_shopSizeRelate (pairProdId, pairSizeId) VALUES(" & prodId & ", " & postId & ")")
			End If
			Set rs = Nothing
		Else
			Set rs = oConn.Execute("SELECT pairSize, pairProdId, pairSizeId FROM tbl_shopSizeRelate WHERE pairProdId = " & prodId & " AND pairSizeId = " & postId)
			If Not rs.EOF Then
				oConn.Execute("DELETE FROM tbl_shopSizeRelate WHERE pairProdId = " & prodId & " AND pairSizeId = " & postId)
			End If
			Set rs = Nothing
		End If
	Next
	closeDB()
	Response.reDirect("shopProd.asp")
End If

Känner att jag är mycket nära en lösning, men ngt saknas fortfarande.

Tack!

Medlem sedan feb. 20034 441 inlägg
#14

Ingen som har tips på vad jag ska göra för att lösa det här?
Verkar bara vara något litet som ska till i min kod ovan.
Misstänker att jag måste få med 'prodId' för att tala om för scriptet att inte 'plocka ut för mycket'.

Kanske det finns ett bättre sätt att lösa det här på?`
Tack på förhand!

Medlem sedan jan. 20022 440 inlägg
#15

Testa att k;ra med n[gon typ av DISTINCT kanske?

Medlem sedan feb. 20034 441 inlägg
#16

CatZ skrev:

Testa att k;ra med n[gon typ av DISTINCT kanske?

Okej, hur skulle det se ut tillsammans med min kod ovan?
Ge gärna lite exempel kod, så kanske jag förstår det lite bättre.

Tack!

Medlem sedan feb. 20034 441 inlägg
#17

Nu har jag sökt en hel del i SQL forumet och kommer egentligen inte fram till något alls.
Har testat med:

sSql =	"SELECT DISTINCT pairSize, pairProdId, pairSizeId, sizeId, sizeName, sizeOrder " &_
	"FROM tbl_shopSizeRelate sSr INNER JOIN tbl_shopSize sS " &_
	"ON sSr.pairSizeId = sS.sizeId " &_
	"ORDER BY sizeOrder ASC"

Men det blir ingen som helst skillnad.
Hur ska jag göra för att få bort alla dessa dubletter?

Tack!

Medlem sedan dec. 2004143 inlägg
#18

Jasså så ni har stulit min tråd ;) har fortfarande inte löst detta problem *host* 2005-01-24 *host* så jag är intresserad av alla resultat MickeA.com :)

mvh

273 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
146 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)