users
このユーザーのスコアも表示できるテーブルがあります。つまり、ユーザーは最高スコアを 1 つだけ持つことができます。私が達成したいのは、すべてのユーザーからの上位 10 のハイスコアと、現在のユーザーの 5 つの前のスコアと次の 5 つのスコアを照会することです。
SQLFiddle http://sqlfiddle.com/#!2/466d0/5
現在、すべてのユーザーを選択し、高いスコアで降順で並べ替え、各ユーザーの行番号を与えるクエリがあるため、スコアでソートされます。そのための作業クエリは次のとおりです。
SELECT u.id, u.score,
@curRow := @curRow + 1 AS POSITION
FROM b_users u
JOIN (SELECT @curRow := 0) r
ORDER BY u.score DESC , u.id ASC
出力は正しい
| ID | SCORE | POSITION |
|----|-------|----------|
| 5 | 500 | 1 |
| 20 | 433 | 2 |
| 14 | 432 | 3 |
| 18 | 350 | 4 |
| 19 | 320 | 5 |
| 16 | 201 | 6 |
| 17 | 150 | 7 |
| 12 | 90 | 8 |
| 23 | 90 | 9 |
| 11 | 70 | 10 |
| 22 | 70 | 11 |
| 10 | 60 | 12 |
| 9 | 50 | 13 |
| 21 | 40 | 14 |
| 4 | 12 | 15 |
| 3 | 10 | 16 |
| 8 | 10 | 17 |
| 13 | 10 | 18 |
| 24 | 10 | 19 |
| 15 | 8 | 20 |
| 1 | 5 | 21 |
| 2 | 3 | 22 |
| 6 | 3 | 23 |
| 7 | 2 | 24 |
繰り返しますが、そのための SQLFiddle はhttp://sqlfiddle.com/#!2/466d0/5
です。たとえば、ID が 8 の場合に上位 10 位のみを出力するように、このクエリを拡張する方法に行き詰まっています。 (位置 17) の場合、12 から 22 までの位置も出力します。