如何在Mysql中保存一个排名列

时间:2014-06-12 17:09:23

标签: mysql

我是MySQL新手。 我试过这个并设法得到一个排名列。

SELECT  *,
    @curRank := @curRank + 1 AS rank
    FROM patients p, (SELECT @curRank := 0) r
    ORDER BY ntx;

我有两个问题:
1)如何将排名列永久保存到数据库? 2)如何创建另一个名为rank2的列并将其保存到数据库中? 感谢

1 个答案:

答案 0 :(得分:1)

ALTER TABLE patients ADD COLUMN rank INT UNSIGNED;

SET @curRank = 0;

UPDATE patients SET rank = @curRank := @curRank+1
ORDER BY ntx;

虽然我称之为"行号"不是"排名。"等级可以有关系。

如果您想要其他方式订购行号,可以创建更多列。

持续存储这些数据的风险在于难以维持。

  • 如果插入新行怎么办?你必须计算它的行​​号(如果行号有多列,可能会超过一行),并且它可能最终位于其他行的中间位置,所以你必须重新编号其他行行应该更高。
  • 如果删除现有行怎么办?这还需要重新编号任何编号更高的行。

在重新编号的两种情况下,您都必须考虑并发性。你如何阻止多个客户同时进行重新编号并弄乱彼此的编号?为了确保解决这个问题,您必须锁定整个表格。

如果您从未有多个客户同时执行此操作,那么您的应用程序可能没什么大不了的,但有经验的数据库程序员会尽量避免这种情况。