joel_joel88 skrev:
När jag gör webshopar så använder jag databas och använder global.asa i fall någon lämnar sidan utan att ha full följt köpet, så tar det bort det han har beställt Det går ju använda sessions och cookies i stället för databaser men det jag sa anser att databaser smidigast.
joel_joel88 » Din kod är ju jättefin (inte ur prestandasynpunkt dock), men kan du tala om för mig hur det hjälper trådskaparen att lösa sitt problem? Det är en ganska stor självklarhet att han skall använda en databas och hur kundkorgen töms vid sessions-timeouter, är nog det minsta av problemen, inte sant?
devotion » Jag skulle nog se till att skapa en databasstruktur som ser ut ungefär såhär;
tbl_Article
ArticleId - PK
ArticleArtNr
ArticleName
ArticleLongtext
tbl_Supplier
SupplierId - PK
SupplierName
tbl_ArticleSupplier
AS_ArticleId
AS_SupplierId
AS_ArticlePrice
Tabellen tbl_ArticleSupplier anger vilken produkt varje leverantör har samt priset för just dess relation. Det går att bygga mer avancerat, men jag hoppas du förstår min tanke.
Vidare, en 'kundkorg'?
tbl_Cart
CartSessionId
CartArticleId
För att sedan skapa din jämförelsesida, som ju går att utforma på lite olika sätt, så kan du väl ungefär göra såhär (finns säkert bättre sätt dock);
SQL (lite osäker på den första dock):
set rssup = conn.execute("SELECT COUNT(SupplierId) As SupplierCount, * FROM tbl_Supplier
WHERE SupplierId IN (
SELECT DISTINCT AS_SupplierId FROM tbl_Cart
INNER JOIN tbl_ArticleSupplier ON CartArticleId = AS_ArticleId
WHERE CartSessionId = " & session.sessionid & ")")
set rsart = conn.exeucte("SELECT * FROM tbl_ArticleSupplier
INNER JOIN tbl_Article ON ArticleId = AS_ArticleId
INNER JOIN tbl_Supplier ON SupplierId = AS_SupplierId
WHERE ArticleId IN (
SELECT CartArticleId FROM tbl_Cart
INNER JOIN tbl_Article ON ArticleId = CartArticleId
WHERE CartSessionId = " & session.sessionId & ")")
Skapa matching-dictionary:
dim dic 'as scripting.dictionary
set dic = server.createobject("scripting.dictionary")
dic.comparemode = 1
while not rsart.eof
dic(rsart("Supplier" & rsart("SupplierId") & "Article" & rsart("ArticleId") & "ArticleName") = rsart("ArticleName")
dic(rsart("Supplier" & rsart("SupplierId") & "Article" & rsart("ArticleId") & "ArticlePrice") = rsart("AS_ArticlePrice")
rsart.movenext
wend
Skriv ut alla leverantörer (tabell-header först):
response.write "<table><tr>"
while not rssup.eof
response.write "<td>" & rssup("SupplierName") & "</td>"
rssup.movenext
wend
response.write "</tr>"
rsart.movefirst: rssup.movefirst
while not rsart.eof
response.write "<tr>"
while not rssup.eof
response.write "<td>"
response.write dic("Supplier" & rssup("SupplierId") & "Article" & rsart("ArticleId") & "ArticleName")
response.write "<br>"
response.write dic("Supplier" & rssup("SupplierId") & "Article" & rsart("ArticleId") & "ArticlePrice")
response.write "</td>"
rsssup.movenext
wend
rssup.movefirst
response.write "</tr>"
rsart.movenext
wend
response.write "</table>"
Efter detta känner jag att en förklaring är på sin plats. ;)
Första SQL-frågan hämtar alla leverantörer, men bara de som berörs av det kunden har i kundkorgen. Andra SQL-frågan hämtar alla kombinationer av artiklar som kan finnas med de leverantörer som levererar artiklarna.
När vi sedan skapar vårt dictionary (mycket användbara objekt btw) så duplicerar vi alla dessa kombinationer, så att vi kan accessa dem i koden lättare. Vi döper varje recordset-post till t.ex. Supplier12Article45ArticleName, och denna post kan sedan innehålla t.ex. 455, som är priset på denna specifika artikel för denna specifika produkt. Leverantören med ID 12 har alltså en artikel med ID 45 som kostar 455 SEK (föreslagsvis). Lite krångligt kanske, men det är nog det enklaste sättet.
När vi sedan loopar igenom varje artikel, så på varje rad loopar vi även igenom alla leverantörer och hämtar genom att anropa ovanstående dic-poster, gneom att konkatenera ihop post-namnet. Finns inte denna specifika artikel i dictionaryt (leverantören har inte denna artikel) så spelar det ingen roll, för det blir bara en lucka i vårt diagram ändå.
Detta är under förutsättning att databasstrukturen ser ut som jag har ritat upp. Du får försöka att skriva något slags script som genererar värden in i 'mina' tabeller från de tre du har idagsläget. Det borde inte vara några problem dock, men du måste nog skapa tbl_Article först, för att sedan se till att binda upp datat i tbl_ArticleSupplier.
Hoppas du förstår, och håll ett öga öppet för buggar, koden är helt otestad (doh)! :D