我正在尝试将多行order
字段逐一增加,同时考虑该字段的最大值。
CREATE TABLE IF NOT EXISTS `jobs`(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(128) NOT NULL,
`order` INT(11) NOT NULL DEFAULT 0,
PRIMARY KEY(`id`));
INSERT INTO `jobs`(`name`) VALUES("John"),("Steven"),("Marie"),("Clair"),("Richard"),("Rober"),("Barbara")
UPDATE
`jobs` AS `j1`,
(SELECT MAX(`order`) AS `max` FROM jobs) AS `j2`
SET `j1`.`order` = `j2`.`max` + 1
WHERE `j1`.`id` > 4
它将Richard,Rober和Barbara的行设置为1,我想成为1,2,3如果我再次执行它,我希望它们是4,5,6
我知道如果列顺序为auto_increment / unique,那将是完美的,但在这种情况下不可能。
答案 0 :(得分:1)
如果您可以使用用户定义的变量,那么您可以这样做
UPDATE
`jobs` AS `j1`
cross join (
select @r:= (SELECT MAX(`order`) AS `max` FROM jobs)
) t
SET `j1`.`order` = @r:= @r + 1
WHERE `j1`.`id` > 4