webForumDet fria alternativet

Decimalerna försvinner...

ASP

7 svar · 340 visningar · startad av joup

Medlem sedan feb. 2002116 inlägg
Frågan#1

Jag har följande SQL-sats som skall plocka ut ett medelbetyg från en massa röster.

SQL = "SELECT s.id, s.namn, AVG(m.betyg) as medel, count(betyg) as antal FROM spel as s INNER JOIN medlem_spel as m ON s.id = m.spel WHERE m.betyg > 0 GROUP BY s.id ORDER BY medel DESC limit 20"

Koden fungerar perfekt, förutom problemet att när jag sedan skriver ut "medel" på sidan, så blir det inga decimaler alls. Vad beror detta på?

Kör jag scriptet på min IIS hemma fungerar det perfekt, men när jag slänger upp koden på webhotellet så blir det inga decimaler.

Jag använder mig av ASP/VBScript samt MySQL.

Medlem sedan juni 200032 967 inlägg
Medlem sedan feb. 2002116 inlägg
#3

Får det ändå inte att fungera, koden ser ut så här i sin helhet:

<%
Set Connection = Server.CreateObject("ADODB.Connection")
DSNtemp = "driver={MySQL};SERVER=www.aleborg.info;DNS=xxx;DATABASE=xxx;UID=xboxse1;PWD=xxxx;option=16384;" 
Connection.Open DSNtemp

SQL = "SELECT s.id, s.namn, AVG(m.betyg) as medel, count(betyg) as antal FROM spel as s INNER JOIN medlem_spel as m ON s.id = m.spel WHERE m.betyg > 0 GROUP BY s.id ORDER BY medel DESC limit 20"
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open SQL, Connection

ant = 1
Do until RS.EOF or ant>10

antal = cint(RS("antal"))
if antal>2 then
%>

<%=ant%>. <%=RS("namn")%> (Betyg: <%=RS("medel")%>, baserat på <%=antal%> röster)<br><br>

<%
ant = ant + 1
end if
RS.MoveNext
Loop
Set RS = Nothing
Set Connection = Nothing
%>

Problemet är alltså att RS("medel") inte får några decimaler, utan blir bara ett heltal (typ 9 istället för 9,2)

Medlem sedan jan. 20013 341 inlägg
#4

Det ska räcka med "option=16387", i kopplingen, men det gör det inte för jonas!
Alternativet är ju DSN-koppling, ända skillnaden som görs där är att man sätter "Don't use setlocal"

Medlem sedan feb. 200112 078 inlägg
#5

Funktionen AVG() returnerar inte decimaler, enligt min 1200-sidiga bok till MSSQL-server 2000, det har med casting att göra. Jag vet inte hur det är i mySQL dock.

Jag gissar lite, testa detta:

SQL = "SELECT s.id, s.namn, CAST(AVG(m.betyg) as Decimal) as medel, count(betyg) as antal FROM spel as s INNER JOIN medlem_spel as m ON s.id = m.spel WHERE m.betyg > 0 GROUP BY s.id ORDER BY medel DESC limit 20"

LarsG har nog mer koll på detta. :)

RED. Fast vid närmare eftertanke, det tillkommer nog inga decimaler efter att AVG har körts ändå, så det kommer nog inte fungera. :l

Medlem sedan feb. 2002116 inlägg
#6

Nix, det fungerade inte. Det konstiga är att jag inte får några decimaler även om jag byter ut AVG(m.betyg) mot t.ex. sum(m.betyg)/count(betyg). Så det verkar inte vara AVG som spökar heller.

Medlem sedan juni 20019 519 inlägg
#7

Kan du inte kolla på hur andra har gjort det? typ http://www.gruvsjo.com/,http://www.joakimweb.com/ eller någon annan bra ASP sida... detta hjälper dej kanske inte..

Medlem sedan juli 2000112 inlägg
#8

Hade samma problem.
Det försvann dock när jag bytte ut

RS.Open SQL, Connection

mot

Set RS = Connection.Execute(SQL)

har dock ingen aning om varför :o

258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)