mysql - MYSQL中自动递增的列

标签 mysql sql database

我需要创建一个从 1- 自动递增的列(但是有行数)。但是,我需要该列根据概率列的顺序重新排序。有可能吗?

最佳答案

我通常建议不要将这种排序计算实现为显式表字段。随着表的增长,保持此类信息最新会产生越来越多的开销。相反,您可以只按概率列进行排序;或者,如果您确实需要查询结果中的“排名”,有多种方法可以做到这一点,像这样的方法应该有效:

SELECT @seq := seq + 1, d.*
FROM theRealData AS d, (SELECT @seq := 0) AS init
ORDER BY theRealData.probability
;
<小时/>

我在下面的评论中提到的存储过程的伪代码(我在写这篇文章时没有查找确切的语法,所以可能有一些我忽略的事情)(如果我颠倒了顺序,可能需要调整。 )

CREATE PROCEDURE theProc (newID INT)
BEGIN
   DECLARE newProb INT; //Not sure if it is int, but for the sake of example
   DECLARE seqAt INT;
   SET newProb = SELECT probability FROM theTable WHERE ID = newID;
   SET seqAt = SELECT IFNULL(min(seq), 1) FROM theTable WHERE probability > newProb;
   UPDATE theTable SET seq = seq + 1 WHERE seq >= seqAt;
   UPDATE theTable SET seq = seqAt WHERE ID = newID;
END

如果您传递所有插入的字段,而不是仅在插入后传递新行的 id,则该过程可以自行执行插入操作并使用 last_insert_id() 完成其余工作。

关于mysql - MYSQL中自动递增的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51141548/

相关文章:

PHP表单验证提交问题?

MySQL 不支持日期格式

mysql - 根据最新创建时间选择唯一行

sql - 计算与组内最小值的差值

C#:在数据库中存储文件大小

mysql - SQL:选择另一个表中是否存在条目

mysql - mySQL 的外键

Mysql多对多表查询

sql - 是否可以通过堆叠数据库来绕过 SQL Server Express 的大小限制?

mysql - 纠正数据库最新标志中的错误数据