我的问题是我正在尝试计算所有用户条目,然后对它们进行排名。在对它们进行排名后,我想更新用户表以记录每个用户的排名。
表:
用户表
活动表
我整晚都在搜索,这就是我到目前为止所拥有的。
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乔
这很好,但我尝试将 Update 和 Set 添加到此查询中以更新 userTbl,但我无法让它工作。
请帮忙!如果您需要更多信息,请与我们联系。
更新:
对于那些正在寻找我所做的来纠正我的问题的人。
首先,我发布了错误的 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
其次,我创建了一个名为 rankTbl 的排名表,其中包含 2 列:rank smallInt 和 userName varchar。
三、修改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 DUPLICATE KEY UPDATE 更改为 userName 而不是排名。当等级改变时,用户名的等级没有更新。使用 userName 更新排名变化。