如何使用序列号自动填充列,但基于参数?
Posted
技术标签:
【中文标题】如何使用序列号自动填充列,但基于参数?【英文标题】:How to autofill a column with sequential number, but based on a parameter? 【发布时间】:2022-01-16 13:58:53 【问题描述】:我正在尝试向几个 mysql (MariaDB) 表添加一个新列。我想让列自动填充序列号。到目前为止,我想出的是:
SELECT @count:=0;
UPDATE users SET ordering = @count:=@count+1;
完美运行。但是,我不知道如何使数字的分配顺序基于另一个值,即另一个名为regdate
的整数字段的升序。这是一个例子。
当前结果:
login | regdate | ordering |
---|---|---|
user | 1633205589 | 1 |
guy | 16332060000 | 3 |
account | 16332090000 | 2 |
data | 16332095000 | 4 |
我想要什么:
login | regdate | ordering |
---|---|---|
user | 1633205589 | 1 |
guy | 16332060000 | 2 |
account | 16332090000 | 3 |
data | 16332095000 | 4 |
我希望它非常清晰简洁:)
【问题讨论】:
【参考方案1】:只要你的更新只涉及单个表,你就可以指定一个顺序:
UPDATE users SET ordering = @count:=@count+1 ORDER BY regdate;
【讨论】:
它就像一个魅力,没想到它这么简单。谢谢!【参考方案2】:您可以使用带有 ROW_NUMBER 的联接表
CREATE TABLE users ( `login` VARCHAR(7), `regdate` VARCHAR(20) , `ordering` INTEGER );
INSERT INTO users (`login`, `regdate`, `ordering`) VALUES ('user', '1633205589', '1'), ('guy', '16332060000', '3'), ('account', '16332090000', '2'), ('data', '16332095000', '4');
UPDATE users u1 JOIN (SELECT `login`, `regdate`, row_number() over (ORDER BY regdate ASC) rn FROM users) u2 ON u1.`login` = u2.`login` AND u1.`regdate` = u2.`regdate` SET u1.ordering = u2.rn ;
登录 |注册日期 |订购 :-------- | :------------ | --------: 用户 | 1633205589 | 1 家伙 | 16332060000 | 2 帐户 | 16332090000 | 3 数据 | 16332095000 | 4SELECT * FROM users
db小提琴here
【讨论】:
这个也可以,结果完全正确,谢谢以上是关于如何使用序列号自动填充列,但基于参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何指定使用自动适应/填充创建的最大列数重复()? [复制]