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.
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)
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"
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
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.