如何根据另一列重置 id 列
How to reset id column according to another column
我在数据库中只有一个table。
我想按 inde
列对 table 进行排序,然后根据 inde
列重置 id
列。
phpmyadmin:
SELECT * FROM `tmatria` ORDER BY `tmatria`.`inde` ASC; // 1 2 3 4 5...
// now id column is 1050 1049 1047...
SET @num := 0;
UPDATE tmatria SET id = @num := (@num+1);
结果:
MySQL returned an empty result set (i.e. zero rows).
更新:
如果我 运行 只是单独的第一行 - 它有效,结果是 1 2 3 4 5...
此外,如果我单独 运行 其余代码 (SET @num...
),它也可以工作,但按 inde
排序会丢失。
所以,我想要的是保持 inde
排序,然后重置 id
列。只有这样,两列才会有相同的值。
您可以像这样即时生成从 1
开始的序列
SELECT *, @rank := @rank + 1 as ranking
FROM tmatria
cross join (select @rank := 0) tmp_alias
ORDER BY inde ASC
要更改您的数据,您可以尝试
SET @num := 0;
UPDATE tmatria
SET id = @num := (@num+1)
ORDER BY inde ASC
我在数据库中只有一个table。
我想按 inde
列对 table 进行排序,然后根据 inde
列重置 id
列。
phpmyadmin:
SELECT * FROM `tmatria` ORDER BY `tmatria`.`inde` ASC; // 1 2 3 4 5...
// now id column is 1050 1049 1047...
SET @num := 0;
UPDATE tmatria SET id = @num := (@num+1);
结果:
MySQL returned an empty result set (i.e. zero rows).
更新:
如果我 运行 只是单独的第一行 - 它有效,结果是 1 2 3 4 5...
此外,如果我单独 运行 其余代码 (SET @num...
),它也可以工作,但按 inde
排序会丢失。
所以,我想要的是保持 inde
排序,然后重置 id
列。只有这样,两列才会有相同的值。
您可以像这样即时生成从 1
开始的序列
SELECT *, @rank := @rank + 1 as ranking
FROM tmatria
cross join (select @rank := 0) tmp_alias
ORDER BY inde ASC
要更改您的数据,您可以尝试
SET @num := 0;
UPDATE tmatria
SET id = @num := (@num+1)
ORDER BY inde ASC