その構造を持つ'user_score'テーブルがあります。
|id|user_id|group_id|score| timestamp |
| 1| 1| 1| 500| 2013-02-24 18:00:00|
| 2| 2| 1| 200| 2013-02-24 18:01:50|
| 3| 1| 2| 100| 2013-02-24 18:06:00|
| 4| 1| 1| 6000| 2013-02-24 18:07:30|
私がする必要があるのは、正確なグループからのそのテーブルからすべてのユーザーを選択することです。そのグループの実際の(タイムスタンプによる)スコアとランクを選択します。
私が持っているのは(編集:Jocachinのコメントの後、私自身のクエリが期待どおりに機能しないことがわかりました。すべての人に申し訳ありません):
SELECT user_id, score, @curRank := @curRank + 1 AS rank
FROM (
SELECT *
FROM (
SELECT * FROM `user_score`
WHERE `group_id` = 1
ORDER BY `timestamp` DESC
) AS sub2
GROUP BY `user_id`
) AS sub, (SELECT @curRank := 0) r
ORDER BY `rank`
たとえばdataおよびgroup_id=1の期待される結果:
|user_id|score|rank|
| 1| 6000| 1|
| 2| 200| 2|
しかし、MySQLの副選択は少し問題があります。他に解決策はありますか?
後で、グループ内の単一ユーザーのランクを取得する必要があります。私は今迷っています。