我正在进行一个项目,需要排名并向用户输出总分。
我有一个名为 userdata
的表像这样
id matricno mtstotal engtotal grandtotal Rank
1 MXX001 6 4
2 MXX002 9 8
3 MXX003 5 3
4 MXX004 4 7
5 MXX005 7 2
SELECT * FROM (
SELECT s.*, @rank := @rank + 1 rank FROM (
SELECT matricno, sum(mtstotal + engtotal) TotalPoints FROM userdata
WHERE class='1' AND subclass='A'
GROUP BY matricno
) s, (SELECT @rank := 0) init
ORDER BY TotalPoints DESC
) r
这个 SQL 创建一些临时的东西
matricno TotalPoints rank
MXX002 17 1
MXX004 11 2
MXX001 10 3
MXX005 9 4
MXX003 8 5
我想要的是在上面的语句中添加一条语句,该语句将复制 TotalPoints 和排名值,并分别更新总计和排名列。 即使它正在格式化另一个代码,但它应该能够在一个编码中求和、排名和更新
最佳答案
更新userdata
时,将其作为子选择与您的查询结合起来并使用其中的值
UPDATE userdata ud
JOIN(
SELECT s.*, @rank := @rank + 1 rank FROM (
SELECT matricno, sum(mtstotal + engtotal) TotalPoints FROM userdata
WHERE class='1' AND subclass='A'
GROUP BY matricno
) s, (SELECT @rank := 0) init
ORDER BY TotalPoints DESC
) r ON r.matricno = ud.matricno
SET ud.grandtotal = r.TotalPoints,
ud.Rank = r.rank
关于php - 从选择结果更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34457681/