我正在尝试保留表格的运行序列号。 我将每天晚上按计划运行查询以更新表,并根据最后一个数字+1填充序列号并继续。
我的桌子:mis_order_charges
ID item_id SEQ
1 20 1
5 15 2
6 21 3
9 20 NULL
12 21 NULL
因此,我想运行一个更新查询以用4和5填充NULL,当然每次运行时都要继续执行此操作。
我尝试了一些事情:
insert into misc_order_charges (seq)
SELECT @row := @row + 1 as row
FROM misc_order_charges moc, (SELECT @row := 0) r where seq is null;
没用
UPDATE misc_order_charges
JOIN (SELECT @rank := 0) r
SET seq=@rank:=@rank+1 where misc_order_charges.seq is null;
上面的方法有效,但是当然会重置计数,因此NULL值为1和2
非常感谢您的帮助!
答案 0 :(得分:0)
您可以使用MAX()函数获得最大值,用作等级变量的基础。
即
UPDATE misc_order_charges
JOIN (SELECT @rank := (SELECT MAX(T.SEQ) FROM misc_order_charges as T)) r
SET seq=@rank:=@rank+1 where misc_order_charges.seq is null;
这将获得第一个排名,因为表中的SEQ编号最高。