Avatar billede biohazard_666 Nybegynder
07. februar 2005 - 20:59 Der er 13 kommentarer og
1 løsning

Hent fra db, beregn gennemsnit, udskriv i rækkefølge

Hejsa..
Står med et pænt stort problem her :-/
Jeg skal have lavet et Top10 system til min side, men hvordan laver jeg det på denne måde:

1. Hente alt fra db'en (kan jeg godt)
2. Beregne gennemsnittet af 1 ting i hver post i db'en
3. udskrive de 10 som har det højeste gennemsnit

Håber i forstår :-/
Ellers spørg, så vil jeg se om jeg kan forklare lidt bedre!

MVH
Lars Rasmussen aka. BioHazard
Avatar billede eagleeye Praktikant
07. februar 2005 - 21:05 #1
Hvad skal gennemsnittet beregnes af? Der er en avg funtion eks:

"select top 10 avg(kolonne), brugerid from tabel order by avg(kolonne) desc"
Avatar billede eagleeye Praktikant
07. februar 2005 - 21:07 #2
arh glemte group by i sql sætningen:

"select top 10 avg(kolonne) as gensinit, brugerid from tabel group by brugerid order by avg(kolonne) desc"
Avatar billede biohazard_666 Nybegynder
07. februar 2005 - 21:19 #3
gennemsnittet skal beregnes af et felt som kan se sårn ud:
13,10,5,00,03
Avatar billede eagleeye Praktikant
07. februar 2005 - 21:47 #4
Ok, det gør det noget mere besværlidt så skal man hente alle poster og regne gennemsnittet ud. Man kan lave et nyt recordset som man ligger data ind i smammen med gennemsnittet så sortere det efter den nye kolonne og udskrive fra det nye recordset eks:


<%
function udregnAvg(str)
  arr=split(str,",")
    sum=0
    for x=0 to ubound(arr)
      sum=sum+int(arr(x))
  next
  udregnAvg=sum/(ubound(arr)+1)
end function

set Conn = server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("db1.mdb")

set rs = server.CreateObject("ADODB.Recordset")
Const adDouble = 5
Const adVarChar = 200
rs.Fields.Append "Navn", adVarChar, 200
rs.Fields.Append "Gennemsnit", adDouble
rs.Open()

SQL = "select * from tabelnavn"
Set rsDb = Conn.Execute(sql)

do while not rsDb.EOF
  rs.Addnew
  rs("Navn") = rsDb("brugernavn")
  rs("Gennemsnit") = udregnAvg(rsDb("kolonne"))
  rs.Update
  rsDb.Movenext
loop
   
rs.Sort = "Gennemsnit DESC"
rs.MoveFirst
i = 1
do while (not rs.EOF) and i<=10
  i=i+1
  response.Write rs("navn") & " " & rs("Gennemsnit") & "<br>"
  rs.Movenext
loop
rs.Close
set rs =Nothing

Conn.Close
Set Conn = Nothing
%>
Avatar billede biohazard_666 Nybegynder
07. februar 2005 - 21:54 #5
det skal lige siges at, jeg bruger MySQL og jeg har en Windows server, og at jeg har oprettet en forbindelse til min db længere oppe i scriptet...
Avatar billede eagleeye Praktikant
07. februar 2005 - 21:56 #6
ok, men så ville connection se anderledes ud. det andet skulle være i samme stil.
Avatar billede biohazard_666 Nybegynder
07. februar 2005 - 21:59 #7
set rs = server.CreateObject("ADODB.Recordset")
Const adDouble = 5
Const adVarChar = 200
rs.Fields.Append "Navn", adVarChar, 200
rs.Fields.Append "Gennemsnit", adDouble
rs.Open()

Kan du ikk lige forklare det, da jeg ikk helt forstår det :-/
Avatar billede eagleeye Praktikant
07. februar 2005 - 22:01 #8
Den laver et recordset og så tilføjes der to kolonner:

rs.Fields.Append "Navn", adVarChar, 200
rs.Fields.Append "Gennemsnit", adDouble

En kolonne navn og en kolonne gennemsnit.
Avatar billede biohazard_666 Nybegynder
07. februar 2005 - 22:02 #9
oki.. så skal jeg vel bare appende alle de forskellige kolonner jeg skal bruge?
Avatar billede eagleeye Praktikant
07. februar 2005 - 22:04 #10
Ja.
Avatar billede biohazard_666 Nybegynder
07. februar 2005 - 22:05 #11
oki :)
Avatar billede biohazard_666 Nybegynder
07. februar 2005 - 22:07 #12
Det ser umiddelbart ud til at virke :)
Laver lige videre på det i morgen, og ser om jeg kan få det til.. Takker for hjælpen indtil videre.. Smutter i seng nu, skal jo tidligt op og i skole :S
Avatar billede eagleeye Praktikant
11. februar 2005 - 21:55 #13
hvis det kunne bruges så her et svar :)
Avatar billede biohazard_666 Nybegynder
12. februar 2005 - 05:13 #14
Det virker bare perfekt :)
Mange tak for hjælpen :)
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