Avatar billede w13 Novice
22. december 2004 - 15:19 Der er 10 kommentarer og
2 løsninger

Udregne et gennemsnit

Hej Eksperter...

Jeg har netop et mindre problem med et "rating"-system, som skal regne gennemsnittet af brugernes stemmer ud.

Jeg bruger blandt andet følgende 2 koder:
Nummer 1:_______________________
sql = "UPDATE elements SET rates = rates + 1 WHERE id = "& request.querystring("id")

Nummer 2:_______________________
sql = "UPDATE elements SET rating = rating + "& request.querystring("rate") &" : 4 WHERE id = "& request.querystring("id")
________________________________
Den første gemmer, hvor mange stemmer, der i alt er afgivet.
Den anden gemmer "værdi af forrige stemmer" + "værdi af ny stemme" : "antal stemmer afgivet i alt"...

Det mente jeg, burde virke, men hvis jeg f.eks. først stemmer på "5" og derefter på "5" igen, så bliver resultatet 7,5... Hvis jeg stemmer "2" og "2", bliver det "6" og stemmer jeg "10" og "10", bliver det "15". Hvad går der dog galt?

Jeg har prøvet at undlade at dividere med antallet af stemmer, og så passer det eksempelvis at "10" og "10" giver "20"... Men ligeså snart division kommer på, bliver det underligt... Er det, fordi "/" ikke er division? For ":" virker heller ikke...

Håber I kan hjælpe...

  W13
Avatar billede w13 Novice
22. december 2004 - 15:23 #1
Hov, kodeeksempel nummer 2 skulle ikke være " : 4 " men " / 4 "! =)
Avatar billede jacand Nybegynder
22. december 2004 - 15:28 #2
Hvorfor diveder du med 4?
skal du ikke divider med rating?

/Jacob
Avatar billede w13 Novice
22. december 2004 - 15:43 #3
Ja, igen en fejl... Det er fra den forkert fil, det må du undskylde... Men kan du se andre fejl, som skaber problemet?
Avatar billede w13 Novice
22. december 2004 - 15:44 #4
(Hov, nej, den skulle divideres med Rates og ikke Rating... Eftersom at Rates indeholder antal af stemmer!)
Avatar billede fennec Nybegynder
22. december 2004 - 15:44 #5
divider er vigtigere end plus hvorfor den bliver kørt først. Du skal derfor have en parentes omkring:

sql = "UPDATE elements SET rating = (rating + "& request.querystring("rate") &") : 4 WHERE id = "& request.querystring("id")

Men skal du ikke bare gemme den totale sum og antal stemmer. Så kan du beregne ratingen når du trækker den ud.

sql = "UPDATE elements SET rates = (rates + 1), rating = (rating + "& request.querystring("rate") &") WHERE id = "& request.querystring("id")

"select (rating/rates) as gennemsnit from elements"
Avatar billede w13 Novice
22. december 2004 - 16:17 #6
Nu sker der slet ikke noget... Hvordan kan det være?

Min kode: http://www.profil.2biaz.dk/rate_ok.txt
Avatar billede fennec Nybegynder
22. december 2004 - 16:36 #7
Det dur ikke på den måde du gør der (altså matematisk). Du kan ikke lave gennemsnit beregning på den måde. Der lægger du den nye værdi til gennemsnittet også dividere med antalet af rates. Forstil dig at der er 100 brugere der alle har givet rating 2. Så skal rating=2. Der kommer så en og giver 5. Din formel bliver så:
(2+5)/101 = 0,069.

Derfor gem den totale rating og antal, som jeg var inde på i post "15:44:34". I dette tilfælde ville rating=200 og antal=100. Så laver du en update:

sql = "update elements SET antal=(antal+1), rating=(rating+"& request.querystring("rate") &") where id="& request.querystring("id")

Så beregner du gennemsnittet når du selecter fra databasen i stedet.
Avatar billede w13 Novice
22. december 2004 - 17:56 #8
Hvordan kan det være, at der ingenting gemmes ved denne kode:

<%
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db/database.mdb")


strSQL = "SELECT * FROM [elements] where [id] = "& request.querystring("id") &""

Set rs = myConn.Execute(strSQL)

sql = "update elements SET antal = antal + 1, rating = rating + "& request.querystring("rate") &" where id = "&

request.querystring("id")

myConn.Close
Set Conn = Nothing
%>

:-S

Og jeg får ingen fejl at vide heller!
Avatar billede cpufan Juniormester
22. december 2004 - 19:01 #9
<%
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db/database.mdb")


strSQL = "SELECT * FROM [elements] where [id] = "& request.querystring("id") &""

Set rs = myConn.Execute(strSQL)

sql = "update elements SET antal = antal + 1, rating = rating + "& request.querystring("rate") &" where id = "&

request.querystring("id")
myConn.execute(sql)  ' Du mangler lige at execute denne sql

myConn.Close
Set Conn = Nothing
%>
Avatar billede w13 Novice
31. december 2004 - 02:26 #10
Tusind tak, det virker fint... Både Fennec og Cpufan får point, da begge har hjulpet meget...
Avatar billede cpufan Juniormester
31. december 2004 - 12:32 #11
så får du lige et svar
Avatar billede fennec Nybegynder
03. januar 2005 - 08:52 #12
.. og godt nytår
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester