Avatar billede kimlarsen1978 Nybegynder
10. juni 2004 - 17:01 Der er 18 kommentarer og
1 løsning

Udregn placering efter uge og points (opdater)

Hejsa
jeg har en konkurrence hvor mine brugere kan samle points sammen og den der så får flest points vinder - logisk nok. Der kan være x målinger pr uge og der udpeges en vinder hver uge.

Jeg samler data op i en tabel med disse rækker
-----------------------------------------------------------
ID    BrugerID        Uge      points
1          1        24          2
2          1        24          2
3          1        24          2
4          2        24          5
5          2        24          2
6          3        24          15
7          4        24          5
8          4        24          5
9          5        24          10
10          6        24          2

11          1        25          5
12          2        25          10
13          3        25          2
Og så videre....
----------------------------------------------------------
Jeg har en adm side hvorfra jeg kan siger "Find placeringer for uge X" Når jeg gør det så skal den gennemløbe den ovenstående tabel og oprette poster i en anden tabel der hedder placering. Beder jeg om placering for uge 24, skal tabellen placeringer opdateres med disse poster. Hvis to brugere har samme antal points fx bruger 4 og bruger 5 skal der være random på om en den ene blev nummer x og den anden x+1
----------------------
ID        BrugerID        Uge    pointsTotal        placering
1              1              24            6            5   
2              2              24            7            4 
3              3              24            15            1 
4              4              24            10            2 (fundet random)
5              5              24            10            3 (fundet random)
6              6              24            2            6
--------------------


Er opgaven klar nok?
Avatar billede dp2001 Juniormester
11. juni 2004 - 15:01 #1
Först...Det er vel lidt "snyd", at der skal väre random placering, hvis ens antal point?

Du behöves da ikke 2 tabeller? Tilföj i stedet en ekstra kolonne "placering" paa den förste tabel og gör fölgende...


sql = "select ID, BrugerID, points from TABEL where Uge = " & UGE & " order by points DESC"
set rs = conn.executs(sql)

do while not rs.eof

if rs("points") <> temp_points then
  placering = placering + 1
end if

sql2 = "update TABEL set placering = " & placering & " where ID = " & rs("ID")
conn.execute(sql2)

temp_points = rs("points")
rs.movenext
loop
rs.close
Avatar billede dp2001 Juniormester
11. juni 2004 - 15:03 #2
rettelse... det skal väre:

set rs = conn.execute(sql)

- bör virke. Ugenummeret kan du sende via formular: Request.Form("uge") eller via Querystring: Request.Querystring("uge")
Avatar billede kimlarsen1978 Nybegynder
11. juni 2004 - 15:38 #3
Den samme bruger har jo flere målinger i hver uge, derfor skal hans points først sumeres og derefter skal placeringen udregnes
Avatar billede dp2001 Juniormester
11. juni 2004 - 15:47 #4
OK, i saa tilfälde...
Lad os sige at tabel 2 hedder TABEL_SUMMATION og at ID er auto_increment:

UGE = Request.Form("UGE")

sql = "select sum(points) as points_total, BrugerID from TABEL where Uge = " & UGE & " order by points_total DESC, BrugerID"
set rs = conn.executs(sql)

do while not rs.eof

if rs("points_total") <> temp_points_total then
placering = placering + 1
end if

sql2 = "insert into TABEL_SUMMATION values (''," & rs("BrugerID") & "," & UGE & "," & rs("points_total") & "," & placering & ")"
conn.execute(sql2)

temp_points_total = rs("points_total")
rs.movenext
loop
rs.close
Avatar billede dp2001 Juniormester
11. juni 2004 - 15:51 #5
set rs = conn.execute(sql)
Avatar billede kimlarsen1978 Nybegynder
11. juni 2004 - 16:29 #6
Lad os sige de samme 2 brugerer 5 uger i træk har samme antal points. Vil det så være den samme bruger der bliver nummer x og den samme der bliver nummer x+1 5 uger i træk - eller er det tilfældigt?
Avatar billede kimlarsen1978 Nybegynder
11. juni 2004 - 16:41 #7
skal placeringen ikke tælles op med 1? eller er der noget jeg har misforstået?
Avatar billede dp2001 Juniormester
11. juni 2004 - 17:00 #8
med ovenstaaende faar de samme placering.
Avatar billede kimlarsen1978 Nybegynder
11. juni 2004 - 17:01 #9
hmmm - der er jo lidt unfair... Det med random skulle gerne virke lidt som en lodtrækning
Avatar billede dp2001 Juniormester
11. juni 2004 - 17:06 #10
tja - jeg vil da netop synes, at det er unfair, at jeg maaske sluttede som nr. 2, selvom jeg havde samme point som "vinderen"
Avatar billede kimlarsen1978 Nybegynder
11. juni 2004 - 17:11 #11
ja det er jo derfor jeg gerne vil lave en lodtrækning...

sql = "select sum(points) as points_total from points where uge = '" & UGE & "' AND aar= '" & AAR & "' order by points_total DESC"

giver denne fejl: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
Avatar billede kimlarsen1978 Nybegynder
11. juni 2004 - 17:12 #12
UGE = Request.Form("UGE")
AAR = Request.Form("AAR")
Avatar billede kimlarsen1978 Nybegynder
11. juni 2004 - 17:13 #13
Det skal vel også være noget GROUP BY - når den samme bruger har flere målinger pr. uge?
Avatar billede dp2001 Juniormester
11. juni 2004 - 17:14 #14
Ser ud til at väre connection til din DB?
Avatar billede kimlarsen1978 Nybegynder
11. juni 2004 - 17:21 #15
jeg tror vi er på vildspor... Der er jo mange målinger fra den samme bruger
Avatar billede kimlarsen1978 Nybegynder
11. juni 2004 - 17:45 #16
Jeg har en tabel "points" med x antal rækker her kan en bruger have x antal rækker med points - de skal summerer PR bruger og derefter placeres i den anden tabel
Avatar billede kimlarsen1978 Nybegynder
11. juni 2004 - 18:31 #17
Så fik jeg det til at spille:
---------------------
UGE = Request.Form("UGE")
AAR = Request.Form("AAR")

strSQL = "select DISTINCTROW Sum(points) AS pointSum, Count(*) AS antalDeltagerer, brugerstatus, markedsstatus2 from points where uge = '" & UGE & "' AND aar= '" & AAR & "' GROUP BY brugerstatus, markedsstatus2 ORDER BY Sum(points)"
Set rs = Conn.Execute(strSQL)

placeringTemp = 1
    do while not rs.eof
        sql_2 = "insert into placering (brugerstatus, markedsstatus2, uge, aar, totalPoints, placering) values ('" & rs("brugerstatus") & "'," & rs("markedsstatus2") & ",'" & UGE & "','" & AAR & "'," & rs("pointSum") & ",'" & placeringTemp & "')"
        Conn.Execute(sql_2)
        placeringTemp = placeringTemp + 1
        rs.movenext
    loop
rs.close
-------------------------
Men jeg mangler statig én der kan finde ud af lave en fair lodtrækning hvis 2 eller flere har samme antal points. det skal i så fald gøres inden posterne gennem i placering - nogen der lige har det?
Avatar billede eagleeye Praktikant
13. juni 2004 - 23:42 #18
Efter længere dialog omkring løsninger i http://www.eksperten.dk/spm/509438 er vi kommet til:

strSQL = "select DISTINCTROW Sum(points) AS pointSum, Count(*) AS antalDeltagerer, brugerstatus, markedsstatus2 from points where uge = '" & UGE & "' AND aar= '" & AAR & "' GROUP BY brugerstatus, markedsstatus2 ORDER BY Sum(points), rnd(-(Sum(points)+MAX(ID))*" & R & ")"
Avatar billede kimlarsen1978 Nybegynder
13. juni 2004 - 23:45 #19
Og det viker super ;-)

Selvom jeg selv fik løst den første del opgave får du alle 60 points for den løsning havde jeg aldrig fundet selv ;-)

Takker
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

Seneste spørgsmål Seneste aktivitet
I dag 10:21 Ny printer, men hvilken Af mort1 i Printere
I går 19:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging