webForumDet fria alternativet

Butikskorgfunktion

ASPur ASP

9 svar · 285 visningar · startad av Addeladde

AddeladdeMedlem sedan jan. 20013 406 inlägg
#1

Jag sitter och klurar på en liten funktion till en korg.

Butiken ska sälja kläder och då finns det två produkt alternativ till varje produkt. produktalternativ = storlek och färg. På sidan finns det två st korgar en liten korg i en frame längst ner på sidan och en egen sida för den stora korgen. Om vi säger att man har handlat två pikétröjer med olika storlek så vill jag att i den lilla korgen ska stå:

2 st piketröja á 399 kr

medans i den stora korgen ska det stå
1 st piketröja large á 399 kr
1 st piketröja medum á 399 kr

korgen är uppbygd på det sättet att det är en databas de två tröjorna sparas alltså på varsin rad i tabellen Den stora korgen är redan klar men frågan är hur jag får en funktion som gör att om en produkt har samma produkt ID fast med olika produktalternativ läggs ihop och ger en variabel värdet två

så här ser sql satsen ut nu

<%
' Get the shopping cart
sqlString = "SELECT korg_id, korg_alternativ1, korg_alternativ2, produkt_namn, " &_
  "produkt_pris, korg_antal " &_
  "FROM korg, produkter " &_
  "WHERE korg_userID=" & userID & " " &_
  "AND korg_produktID = produkt_id " &_
  "ORDER BY korg_id DESC"
SET RS = Con.Execute( sqlString )

IF RS.EOF THEN
%>

------------------
Adde

[Redigerat av Addeladde den 25 maj 2001]

LarsGMedlem sedan dec. 200012 464 inlägg
#2
sql = & _
"select korg_id,produkt_namn,pris,count(*) as antal
  from korg, produkter " &_
"WHERE korg_userID=" & userID & " " &_
"AND korg_produktID = produkt_id " &_
" group by korg_id,produkt_namn,pris " & _
"ORDER BY korg_id DESC

För varje unik kombination av korg_id, produkt_namn och pris får du fram antalet förekomster.

------------------
essentitia preter non sans multiplicandum

AddeladdeMedlem sedan jan. 20013 406 inlägg
#3

Det fungerar inte det blir två fält istället för ett. Jag har gjort om funktionen lite så att den fungerade.

tar med hela koden

    <%

sqlString = "select korg_id, produkt_namn, produkt_pris, count(*) as antal " &_
"FROM korg, produkter " &_
"WHERE korg_userID=" & userID & " " &_
"AND korg_produktID = produkt_id " &_
"GROUP by korg_id, produkt_namn, produkt_pris " & _
"ORDER BY korg_id DESC"
SET RS = Con.Execute( sqlString )

IF RS.EOF THEN
%>

   <p><select size="1" name="Varukorg">
    <option>Din korg är
    tom&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    </option>
    &nbsp;
    </select></p>

<% 
ELSE 
orderTotal = 0

%>
<p><select size="1" name="Korglista">
    <% WHILE NOT RS.EOF 
orderTotal = orderTotal + ( RS( "produkt_pris" ) * RS( "antal" ) )
%>
  <option value="<%=Server.HTMLEncode( RS( "produkt_namn" ) )%>"> <%=Server.HTMLEncode( RS( "antal" ) )%>&nbsp;st&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<%=Server.HTMLEncode( RS( "produkt_namn" ) )%>
  ;&nbsp;&nbsp;&nbsp; á&nbsp;&nbsp;&nbsp;&nbsp;<%=formatNumber( RS( "produkt_pris" ) )%>&nbsp;kr</option>
  &nbsp;

  &nbsp; <% 
RS.MoveNext
WEND
%>
  </select>

------------------
Adde

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Vad är korg_id för något? Om det bara är en räknare i tabellen krog så behöver den inte vara med i selectfrågan. Dvs

sql = & _
"select produkt_namn,pris,count(*) as antal
from korg, produkter " &_
"WHERE korg_userID=" & userID & " " &_
"AND korg_produktID = produkt_id " &_
" group by produkt_namn,pris " & _
"ORDER BY produkt_namn DESC "

------------------
essentitia preter non sans multiplicandum

AddeladdeMedlem sedan jan. 20013 406 inlägg
#5

KorgID är bara en räknare men den gör så att den senaste produkten som man la i korgen visas högst upp.
------------------
Adde

[Redigerat av Addeladde den 26 maj 2001]

AddeladdeMedlem sedan jan. 20013 406 inlägg
#6

Jag har fått det att fungera nu men om jag köper 3 st medum tröjor och 2 st large så visar korgen bara 2 st när det igenligen ska vara 5 st.

jag får det inte att fungera att sortera efter korg_id det fungera bara efter produkt_namn

------------------
Adde

LarsGMedlem sedan dec. 200012 464 inlägg
#7

Du har alltså en kolumn i tabellen korg som innehåller antal som man köper?

I så fall kan du byta ut


   count(*) as antal

mot


   sum(antal) as antal

------------------
essentitia preter non sans multiplicandum

AddeladdeMedlem sedan jan. 20013 406 inlägg
#8

Nu fungerar det perfekt.
Tack så hemskt mycket för hjälpen

------------------
Adde

AddeladdeMedlem sedan jan. 20013 406 inlägg
#9

Hur ska man göra för att kunna sortera efter korg_id så att den senaste produkten som ä inlagd visas högst upp.

om jag lägger till korg_id vid raden Group by så blir det två separata objekt istället för ett som det ska vara.

 
sqlString = "select produkt_namn, produkt_pris, sum(korg_antal) as antal2 " &_
"FROM korg, produkter " &_
"WHERE korg_userID=" & userID & " " &_
"AND korg_produktID= produkt_id " &_
"GROUP by produkt_namn, produkt_pris" & _
"ORDER by korg_id DESC"
SET RS = Con.Execute( sqlString )

Detta felmeddelande får jag

Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'by'.
/td/butik/korg2.asp, line 143

------------------
Adde

LarsGMedlem sedan dec. 200012 464 inlägg
#10

Anledningen till att du får syntaxfel är att det saknas ett blanktecken mellan produkt_pris och order.

sqlString = "select produkt_namn, produkt_pris, sum(korg_antal) as antal2 " &_
"FROM korg, produkter " &_
"WHERE korg_userID=" & userID & " " &_
"AND korg_produktID= produkt_id " &_
"GROUP by produkt_namn, produkt_pris" & _
" ORDER by korg_id DESC"
SET RS = Con.Execute( sqlString )

Jag tror dock inte att det hjälper. Om du har group by så måste nog det man gör order by på vara med i select-listan.

------------------
essentitia preter non sans multiplicandum

133 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)