这是我无法解决的问题: 我在事务表上有一个特殊的索引号,我每年都会重置这个特殊的索引号。这就是代码。
SELECT IFNULL(MAX(Index),0)+1 as Index_Number FROM Transactions WHERE YEAR(Create_Date) = '2016'
我对此查询没有任何问题,它的工作正常。如果我们认为记录数据的日期是:
id | index | create_date
1 | 7 | 2016-01-01
2 | 8 | 2016-01-03
在2016-01-02日期输入数据时,id 2的索引号必须为9.新添加数据的索引号必须为8.
换句话说,最终状态应为:
id | index | create_date
1 | 7 | 2016-01-01
3 | 8 | 2016-01-02
2 | 9 | 2016-01-03
我该怎么做?
我忘了提到索引号因人而异,所以我不能使用auto_increment。
答案 0 :(得分:0)
根据你的例子,它应该是这样的:
set @userinput = '2016-01-02';
set @i = (SELECT ifnull(min(index),1) FROM FROM Transactions WHERE YEAR(Create_Date) = '2016') and Create_Date > @userinput;
update Transactions set index = index+1 WHERE YEAR(Create_Date) = '2016') and index >= @i;
insert into Transactions (`index`,`Create_Date`) values (@i, @userinput);
因此,首先搜索最小索引,查找输入的日期(特定年份),
然后你更新日期更长但同年的行的所有“索引”,将其移动
最后插入新行