从排序的位置给一行赋值 table

Assign a value to a row from the position of a sort table

我有一个 MySQL table 行:id、score 和 rank。我想制作一个触发器,对 table 进行排序并将新位置分配给 table 的排名值,例如:id。缺口。分数。排名

John. 8. ?
Mike. 10. ?
Al. 5. ?
Terry. 12. ? SORT BY score= id nick. score. rank.
Terry. 12. 1
Mike 10. 2
John. 8. 3
Al. 5. 4

我知道如何用ORDER BY score DESC这句话对table进行排序,但我不知道如何将元素的新位置分配给排名。谢谢

我不建议将排名存储在 table 本身中。这是一个派生信息,可以在需要时即时计算。另一方面,存储它会导致 维护它:您会发现自己为每个 DML 操作(更新、插入、删除)都创建了存储过程。

您可以改为创建视图。如果你是 运行 MySQL 8.0 或 MariaDB >= 10.3,你可以使用 window 函数:

create view myview as
select 
    id, 
    score,
    rank() over(order by score desc) rnk
from mytable 

这让您始终了解最新的数据,维护成本为 0。

请注意,rank 是一个 SQL 关键字,因此列名不是一个好的选择 - 我将该列命名为 rnk