我的問題是我想要計算所有的用戶條目,然後排名他們。在我排列它們之後,我想更新用戶表來記錄每個用戶的等級。MySQL計算等級然後從結果更新表
表:
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金
約翰二
3喬
這是好的,但我試圖添加更新並設置爲此查詢更新userTbl,我只是無法讓它工作。
請幫忙!如果您需要更多信息,請與我們聯繫。
UPDATE:
對於那些尋找正是我所做的糾正我的問題。
首先,我發佈了錯誤的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列:排名SMALLINT和用戶名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);
我改變了對重複密鑰更新至USERNAME,而不是排名。當等級改變時,用戶名的等級沒有更新。在等級中使用userName更新更改。
您可以提供完整的模式上sqlfiddle你的問題澄清的 –
做什麼的'userTbl'和'activityTbl'看喜歡? –
userTbl列:userNum用戶名電子郵件排名activityTbl列:actNum用戶名(FK)actName actDate actTime我需要熟悉sqlfiddle,因爲我從來沒有用過它。我會盡力在那裏得到一些東西。 – korenzo