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 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
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
</option>
</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" ) )%> st <%=Server.HTMLEncode( RS( "produkt_namn" ) )%>
; á <%=formatNumber( RS( "produkt_pris" ) )%> kr</option>
<%
RS.MoveNext
WEND
%>
</select>
------------------
Adde
LarsGMedlem sedan dec. 200012 464 inlägg 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
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]
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 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
Nu fungerar det perfekt.
Tack så hemskt mycket för hjälpen
------------------
Adde
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 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