select sumpoints,voters,(sumpoints+0.0)/(votes + 0.0) as average from t
order by 3 desc
red: sql-forumet alltså
12 svar · 151 visningar · startad av Wiberg
Jag har en sida där besökarna kan betygsätta olika saker från 1 till 10 och sen ska allt listas med det som har högst betyg först.
Som det är nu så sparas summan av alla röster i ett fält och antalet röster i ett annat. Sen får jag fram snittbetyget genom att dividera summan med antalet röster.
Men hur gör jag för att sedan kunna skriva ut allt med hänsyn till detta?
ORDER by... alltså. :q
select sumpoints,voters,(sumpoints+0.0)/(votes + 0.0) as average from t
order by 3 desc
red: sql-forumet alltså
Ja, det blev visst fel forum...
SQL = "select titel, url, röster_antal, röster_summa, tid,(röster_summa+0.0)/(röster_antal + 0.0) as average from länkar order by 3 desc"
Item cannot be found in the collection corresponding to the requested name or ordinal
:q
Order by 3 innebär att man sorterar på 3:e kolumnen i selectlistan. I ditt fall så borde det alltså bli
order by 5
Felet som du får beror på att du anger ett namn som inte finns i ett recordset. För att t.ex. få ut snittet så skriver du
rs("average")
Lite svårt att säga exakt vad som är fel utan att se koden runtomkring.
Borde det inte bli order by 6 då? 5:an är ju tiden när länken lades in. Jag vill använda värdet jag får i divisionen till att använda som order by...
Det stämmer, jag räknade fel där. Hur gick det med det andra då.
[Microsoft][ODBC Microsoft Access Driver]Numeric value out of range (null)
Ok, du har alltså poster där röster_summa och/eller röster_antal inte är definerat.
Det kanske är bäst att välja bort dessa rader helt och hållet från resultatet
SQL = "select titel, url, röster_antal, röster_summa, tid,(röster_summa+0.0)/(röster_antal + 0.0) as average from länkar where röster_summa is not null and röster_antal is not null and röster_antal > 0 order by 6 desc"
Jag lade även till ett villkor så att man inte får poster med 0 röster vilket annars skulle ge upphov till division med noll.
red: sex skulle det vara
Item cannot be found in the collection corresponding to the requested name or ordinal.
Begriper inte vad som är fel. Det verkar ju stämma...
Sorry. Det felmeddelandet berodde på att försökte hämta rs("id") fast det inte var med i SQL-uttrycket. :)
Men det blir fortfarande inte riktigt rätt. :l
Jag vill ju till att börja med att även de som inte har blivit betygsatta än också ska skrivas ut fast då alltså komma sist på listan.
Order by blir för övrigt helt fel. Först kommer en med snittbetyget 4 som sedan följs av 1, 1, 7 etc...
Okej, jag ser att du har Access så då går det att använda några specifika Access-funktioner
SQL = "select titel, url, röster_antal, röster_summa, tid,iif(röster_summa is null or röster_antal is null or röster_antal = 0,cdbl(0.0),cdbl(röster_summa)/cdbl(röster_antal)) as average
from länkar order by 6 desc"
Tanken är att de sidor som inte har några röster får snittet 0 och dessa borde då hamna sist i sorteringsordningen.
Nu funkar det perfekt så det är väl bara att tacka och buga för din effektiva support! :D
Det här med sorteringen funkar visst innan också. Problemet var att när jag la till id i SQL-uttrycket så glömde jag ändra 6 till 7. :)