Kunsten er at jeg først og fremmest skal via et database udtræk fra tabel1 for at finde poster ud fra en session ID
derefter skal jeg så have de varenumre der er i tabel1,kædet sammen med tabel2 så jeg via de vareID i tabel 1, kan hente priserne fra tabel2 og så lave sum, hvis i forstår,
Danmark vil mindske afhængigheden af globale techgiganter, men det kræver mere end politiske formuleringer og strategier, understreger PROSA’s formand Niels Bertelsen.
...men på den anden side... hmmm... umiddelbart ville jeg tro at man skulle vælge vareid (godt nok fra tabel1) og gruppere som dr_chaos har vist
SELECT SUM(tabel2.PRIS), tabel1.VAREID FROM tabel1 INNER JOIN tabel2 ON tabel1.VAREID =tabel2.ID GROUP BY (tabel1.VAREID) WHERE SESSIONID = hvad_den_nu_skal_være
...faktisk skal der nok vendes rundt på group by og where
SELECT SUM(tabel2.PRIS), tabel1.VAREID FROM tabel1 INNER JOIN tabel2 ON tabel1.VAREID = tabel2.ID WHERE SESSIONID = hvad_den_nu_skal_være GROUP BY (tabel1.VAREID)
set rsSum= Conn.Execute("SELECT SUM(varedetalje.PRIS), KurvLinier.varedetaljeid AS antal FROM kurvlinier INNER JOIN varedetalje ON kurvlinier.VAREID = varedetalje.ID WHERE SESSIONID = '" & session.sessionID & "' GROUP BY (kurvlinier.VaredetaljeID)")
Korrekt? Problemet er bare at den regner forkert, umiddelbart her, der udskriver det første vareID, og ikke selve summen.
set rsSum= Conn.Execute("SELECT SUM(varedetalje.PRIS) AS antal FROM kurvlinier INNER JOIN varedetalje ON kurvlinier.VAREID = varedetalje.ID WHERE SESSIONID = '" & session.sessionID & "' GROUP BY (kurvlinier.VaredetaljeID)") brug denne.
Der er noget galt, den giver mig en sum på 139,00 kr uanset hvor mange varer der er lagt i kurven. se http://shop.lund.dk , læg en vare i kurven, i kategorien trøjer, og se sum i toppen.
set rsSum= Conn.Execute("SELECT SUM(varedetalje.PRIS) AS antal, kurvlinier.varedetaljeid FROM kurvlinier INNER JOIN varedetalje ON kurvlinier.VAREID = varedetalje.ID WHERE SESSIONID = '" & session.sessionID & "' GROUP BY (kurvlinier.VaredetaljeID)")
Kan du ikke prøve at komme med et udsnit af dine data, for der er et eller andet galt med det vi har set her eller den måde vi har opfattet sammenhænget mellem data på, for det burde fungere med den summering og gruppering som er foreslået hidtil...
set rsSum= Conn.Execute("SELECT SUM(varedetalje.PRIS) AS antal, kurvlinier.varedetaljeid FROM kurvlinier INNER JOIN varedetalje ON kurvlinier.VAREID = varedetalje.ID WHERE SESSIONID = '" & session.sessionID & "' GROUP BY (kurvlinier.VaredetaljeID)") sum = formatnumber(rssum("antal")) text = "Der er vare(r) i kurven" Set RSKurv=Nothing end if
Hvilket resultat får du egentlig med den SQL-sætning du har lige nu?
Jeg kan se der er risiko for lidt forvirring mellem det alias som summen får og navnet på en eksisterende kolonne i tabellen, nemlig "antal". Det kan godt være du skal ændre alias for summen til f.eks. kurvPris. I øvrigt er det vel prisen der skal ganges med antal for at finde den samlede pris for hele ordrelinien. Jeg kan så ikke helt gennemskue om der kan risikere at være flere linier i en given brugers varekurv som refererer til den samme vare...?
Desuden er sessionid ikke foranstillet tabelnavnet (det tror jeg dog ikke er en katastrofe, men gør det alligevel for en sikkerheds skyld).
her får jeg fejlen: Fejltype: Microsoft OLE DB Provider for ODBC Drivers (0x80040E10) [Microsoft][ODBC Microsoft Access-driver] Der er for få parametre. Der var ventet 1. /shop/Default.asp, line 271
Jeg tror det er fordi jeg har skrevet kurvelinier.sessionid i stedet for kurvlinier.sessionid. Desuden skal join-betingelsen bruge VaredetaljeID i stedet for VareID, altså:
Hvordan ser koden omkring aflæsningen af denne værdi ud (vis gerne kildekode helt fra definitionen af sql-sætningen til du er færdig med at bruge værdien)?
Du viste i kommentaren fra 12/11-2005 18:14:16 en klump kode, det er bare det jeg gerne vil se igen. Jeg vil gerne sikre mig at vi ikke kæmper med spøgelser, så derfor vil jeg gerne se den kode du bruger til at hente de data du lige har fået returneret...
Yes okay, den ser sådan her ud fra ende til anden :) --------- Set rsKurv = Conn.Execute("select * from KurvLinier where SessionID = '" & Session.SessionID & "'") if rsKurv.EOF then text = "<i>Kurven er tom..</i>" sum = "0,00" else
Ok, at dømme udfra din kode, så tror jeg, at jeg har misforstået dit behov. Det ser ud til at du gerne vil have summen for alle varer til en given session og ikke prisen for hver varelinie... er det korrekt?
Hvis ja, så skal vi jo nok over i en lidt anden SQL-konstruktion:
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.