我是MySQL新手。 我试过这个并设法得到一个排名列。
SELECT *,
@curRank := @curRank + 1 AS rank
FROM patients p, (SELECT @curRank := 0) r
ORDER BY ntx;
我有两个问题:
1)如何将排名列永久保存到数据库?
2)如何创建另一个名为rank2的列并将其保存到数据库中?
感谢
答案 0 :(得分:1)
ALTER TABLE patients ADD COLUMN rank INT UNSIGNED;
SET @curRank = 0;
UPDATE patients SET rank = @curRank := @curRank+1
ORDER BY ntx;
虽然我称之为"行号"不是"排名。"等级可以有关系。
如果您想要其他方式订购行号,可以创建更多列。
持续存储这些数据的风险在于难以维持。
在重新编号的两种情况下,您都必须考虑并发性。你如何阻止多个客户同时进行重新编号并弄乱彼此的编号?为了确保解决这个问题,您必须锁定整个表格。
如果您从未有多个客户同时执行此操作,那么您的应用程序可能没什么大不了的,但有经验的数据库程序员会尽量避免这种情况。