私の問題は、すべてのユーザーエントリを計算してからランク付けしようとしていることです。それらをランク付けした後、各ユーザーのランクを記録するためにユーザーテーブルを更新したいと思います。
テーブル:
userTbl
activityTbl
私は一晩中検索しました、そしてこれは私が今まで持っているものです。
SET @rank := 0;
SELECT * FROM (
SELECT @rank := @rank + 1 AS rank, a.userName
FROM activityTbl a
LEFT JOIN userTbl u ON a.userName = u.userName
GROUP BY a.userName
ORDER BY SUM( TIME_TO_SEC( a.actTime ) )DESC
) as sub
これは次を返します:
ランク|ユーザー
1キム
2ヨハネ
3ジョー
これは問題ありませんが、userTblを更新するためにこのクエリにUpdate and Setを追加しようとしましたが、動作させることができません。
助けてください!さらに情報が必要な場合はお知らせください。
アップデート:
問題を修正するために私がしたことを正確に探している人のために。
まず、間違ったMySQLを投稿しました。私が問題を解決するために使用したものは次のとおりです。
SET @rownum := 0;
SELECT @rownum := @rownum + 1 AS rank, userName, actTimeTotal
FROM (SELECT SUM(TIME_TO_SEC(actTime)) AS actTimeTotal , userName
FROM activityTbl
GROUP BY userName
ORDER BY actTimeTotal DESC) as result
次に、ranksmallIntとuserNamevarcharの2つの列を持つrankTblというランクテーブルを作成しました。
第三に、MySqlスクリプトを次のように変更しました。
SET @rownum := 0;
INSERT INTO rankTbl( rank, userName)
SELECT @rownum := @rownum + 1 AS rank, userName
FROM (SELECT SUM(TIME_TO_SEC(actTime))AS actTimeTotal , userName
FROM activityTbl
GROUP BY userName
ORDER BY actTimeTotal DESC) as result
ON DUPLICATE KEY UPDATE userName = VALUES(userName);
ON DUPLICATEKEYUPDATEをrankではなくuserNameに変更しました。ランクが変更されたとき、userNameのランクは更新されませんでした。userNameを使用すると、ランクが変更されます。