Avatar billede oasen Nybegynder
05. februar 2003 - 13:30 Der er 5 kommentarer og
1 løsning

Find placering

Jeg har spekuleret lidt over, hvordan man lettest finder en brugers placering ud fra gennemsnitsscoren i en tabel med følgende struktur:

BrugerID_____Points

32___________4
21___________3
43___________8
32___________6
10___________5
47___________2
10___________1

F.eks. har bruger nr. 32 placeringen 3:
(4+6) / 2 = 5 points.
Avg(Points) kan jo ikke anvendes i en where-clause.
Er det virkelig nødvendigt at spole hele recordsættet igennem?
Avatar billede eagleeye Praktikant
05. februar 2003 - 13:57 #1
Du kan lave en SQL som denne så får du TOP X liste med størst Point øverst. Du kan medtage Avg i ORDER BY :

SELECT Avg(point) AS AvgPoint, brugerID FROM TableNavn GROUP BY brugerID ORDER BY Avg(point) DESC;
Avatar billede oasen Nybegynder
06. februar 2003 - 14:47 #2
Ja, sådan udtrækker jeg toplisterne.
Men hvis jeg vil have en specifik placering, er jeg vel så nødt til at løbe alle poster med en højere score i gennem og tælle op, indtil jeg når til den aktuelle post (BrugerID). Eller har jeg misforstået dig?

Count = 0
While Not rs.EOF And Not Fundet
  If rs("BrugerID") <> AktueltID Then
    Count = Count + 1
  Else
    Fundet = True
  End If
  rs.MoveNext
Wend
Avatar billede eagleeye Praktikant
06. februar 2003 - 18:08 #3
Ja ok det er man nød til hvis man vil hvade en placering ud fra brugerID.

Måske man kan lave noget med CreateTable og lave en table som indeholder top listen og så ud fra den henter placeringen ud fra den. Det kan måske laves i en Query i access men jeg er ikke helt sikker.
Avatar billede eagleeye Praktikant
06. februar 2003 - 19:37 #4
I dette eks oprettes der en tabel som indeholder TOP X listen og så tilføjes et autonummer kolonne så kan placeringen hendtes ud fra brugerID, så slettes tabellen igen:


'Lav top X listen og lig den i en ny tabel aa_toplist
SQL = "SELECT Avg(point) AS AvgPoint, brugerID INTO aa_toplist FROM TableNavn GROUP BY brugerID ORDER BY Avg(point) DESC"
Conn.Execute(SQL)

'Tilføj en auto number kolonne til aa_toplist
SQL = "ALTER TABLE aa_toplist ADD COLUMN placering COUNTER PRIMARY KEY"
Conn.Execute(SQL)

'Hendt placeringen for brugerID = xxx.. her 2 som eks
SQL = "SELECT placering FROM aa_toplist WHERE brugerID = 2"
Set rs = Conn.Execute(SQL)
Response.Write "BrugerID 2 har placering : " & rs("placering")
rs.Close  'Denne linie skal være her ellers kan man ikke slette tabellen.

'Slet tabellen aa_toplist igen
SQL = "DROP TABLE aa_toplist"
Conn.Execute(SQL)
Avatar billede oasen Nybegynder
07. februar 2003 - 08:33 #5
Smart tænkt! Det vil jeg gøre. Tak :)
Avatar billede oasen Nybegynder
07. februar 2003 - 08:49 #6
Og så kan aa_toplist joines med brugertabellen, når listen over brugere skal udskrives. Genialt...
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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Senior specialister (Datacenter Network) til Forsvarets nye Digitale Backbone

Politiets Efterretningstjeneste

Data engineer til PET

Capgemini Danmark A/S

AI/Data Engineer

Forsvarets Efterretningstjeneste

Network engineer - Datacenter & Automation