【问题标题】: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

我希望它非常清晰简洁:)

【问题讨论】:

    标签: mysql sql database


    【解决方案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 ;
    
    SELECT * FROM users
    
    登录 |注册日期 |订购 :-------- | :------------ | --------: 用户 | 1633205589 | 1 家伙 | 16332060000 | 2 帐户 | 16332090000 | 3 数据 | 16332095000 | 4

    db小提琴here

    【讨论】:

    • 这个也可以,结果完全正确,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 2021-04-11
    • 2019-12-26
    相关资源
    最近更新 更多