webForumDet fria alternativet

Ta reda på spelares ranking en viss datum

Databaser & SQL

7 svar · 445 visningar · startad av The_Hulk

Medlem sedan juni 20031 837 inlägg
Frågan#1

Hej!

Jag har en tabell som innehåller spelare och deras poäng för varje datum.

+------------+---------+-------+
| date       | player  | score |
+------------+---------+-------+
| 2007-12-01 | Pelle   | 126   |
| 2007-12-01 | Olle    | 104   |
| 2007-12-01 | Bertil  | 165   |
| 2007-12-02 | Pelle   | 129   |
| 2007-12-02 | Olle    | 113   |
| 2007-12-02 | Bertil  | 154   |
| 2007-12-03 | Pelle   | 146   |
| 2007-12-03 | Olle    | 135   |
| 2007-12-03 | Bertil  | 145   |
| 2007-12-04 | Pelle   | 151   |
| 2007-12-04 | Olle    | 155   |
| 2007-12-04 | Bertil  | 150   |
+------------+---------+-------+

soterat blir det så här:

2007-12-01
Bertil   165
Pelle    126
Olle     104

2007-12-02
Bertil  | 154
Pelle   | 129
Olle    | 113

2007-12-03
Pelle   | 146
Bertil  | 145
Olle    | 135

2007-12-04
Olle    | 155
Pelle   | 151
Bertil  | 150

Jag vill kunna se vilken placering en viss spelare hade ett visst datum. Hur får jag redan på spelarens placering när man sorterar efter högsta poäng?

För att få ut alla spelare i viss datum sorterade efter högsta poäng använder jag följande:

SELECT player, point FROM highscore WHERE date='2007-12-02' ORDER BY score DESC
Medlem sedan dec. 20025 483 inlägg
#2

Om två personer med lika många poäng anses hamna på samma plats:

SELECT player
     , point 
     , ( select count(*)+1 from highscore where date = '2007-12-02' and score > h.score ) as rank
  FROM highscore h
 WHERE date='2007-12-02' 
ORDER
    BY score DESC
Medlem sedan juni 20031 837 inlägg
#3

hmm, det ville inte fungera för mig, fick inga träffar på det.

/r
ähh, var nog jag som använde fel datum. testar igen.

Medlem sedan juni 20031 837 inlägg
#4

det fungerade som det skulle, en liten följdfråga.
om jag lägger till ett fält "rank" i tabellen, hur gör jag då för att uppdatera det fältet med spelarens placering den datumen?

Medlem sedan dec. 20025 483 inlägg
#5

Vilket DBMS?

Medlem sedan juni 20031 837 inlägg
#6

Mysql ver 5.

/r

Hmm, kan man inte läsa från samma tabell som man vill uppdatera?

hittade precis detta i hjälpen för mysql 5

Currently, you cannot update a table and select from the same table in a subquery.

Hur ska jag då lösa det?
måste jag skapa en temporär tabell där jag lägger över placeringen i och sen flyttar den till min highscore-tabell?

Medlem sedan juni 20031 837 inlägg
#7

Ska jag skapa en ny tråd med frågan eller hoppas på att någon som kan hjälpa mig hittar den här?

Medlem sedan dec. 20025 483 inlägg
#8

Följande kanske kan vara av intresse:
http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/

260 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)