根据前一行增加一行

时间:2017-10-05 09:20:04

标签: mysql sql insert auto-increment

这是我的表

id / step    / piece / tube / Validate / tool / tool2 / tool3 / index
__________________________________________________________________
1 / step3    /4113292/ ezpz / ok       /616255/222233/222231  / 0
2 / step6    /4113292/ ezpz /          /333255/212393/922231  / 0
3 / step2    /3322234/ PZEZ /          /321938/330200/3O32O   / 0
4 / step4    /4113292/ ezpz /          /616255/902233/8243231 / 0

当我添加一个具有相同管和片的新步骤(带插入)时,我想增加索引。

例如:

id / step    / piece / tube / Validate / tool / tool2 / tool3 / index
__________________________________________________________________
1 / step3    /4113292/ ezpz / ok       /616255/222233/222231  / 1
2 / step6    /4113292/ ezpz /          /333255/212393/922231  / 2
3 / step2    /3322234/ PZEZ /          /321938/330200/3O32O   / 1
4 / step4    /4113292/ ezpz /          /616255/902233/8243231 / 3

如果我为4113292和tube ezpz添加新步骤,我想要这个:

id / step    / piece / tube / Validate / tool / tool2 / tool3 / index
__________________________________________________________________
1 / step3    /4113292/ ezpz / ok       /616255/222233/222231  / 1
2 / step6    /4113292/ ezpz /          /333255/212393/922231  / 2
3 / step2    /3322234/ PZEZ /          /321938/330200/3O32O   / 1
4 / step4    /4113292/ ezpz /          /616255/902233/8243231 / 3
5 / step7    /4113292/ ezpz /          /616255/902233/8243231 / 4

或者如果我为作品3322234添加新步骤

id / step    / piece / tube / Validate / tool / tool2 / tool3 / index
__________________________________________________________________
1 / step3    /4113292/ ezpz / ok       /616255/222233/222231  / 1
2 / step6    /4113292/ ezpz /          /333255/212393/922231  / 2
3 / step2    /3322234/ PZEZ /          /321938/330200/3O32O   / 1
4 / step4    /4113292/ ezpz /          /616255/902233/8243231 / 3
5 / step1    /3322234/ PZEZ /          /432938/330200/3O32O   / 2

我这样做会导致步骤正常我想进入下一步

2 个答案:

答案 0 :(得分:0)

来自用户的示例插入 - 而不是“?”将“0”设为默认值,因为每个第一个插入都是0。

INSERT INTO operation (step, piece, tube, tool,tool2,3,index) VALUES (step3, 4113292, ezpz,616255,902233,8243231, 0);

当您使用相同的管件和管子再次插入时,此触发器应该可以完成工作。

DELIMITER //
CREATE TRIGGER yourTrigger
BEFORE INSERT
   ON yourTable FOR EACH ROW
BEGIN
    DECLARE maxIndex INT DEFAULT -1;
    SELECT MAX(index1) m
        FROM yourTable
        WHERE piece = NEW.piece
            AND tube = NEW.tube
        INTO maxIndex;
    IF maxIndex >= 0 THEN
        SET NEW.index1 = maxIndex + 1;
    END IF;
END;//
DELIMITER;

经过SQL Fiddle测试。

P.S。我不得不将“index”重命名为“index1”,因为SQL Fiddle不能用于名为“index”的列。

答案 1 :(得分:0)

创建一个“data_event”表,如下所示:

id / step    / piece / tube / Validate / tool / tool2 / tool3 / index
_____________________________________________________________________
1 / step3    /4113292/ ezpz / ok       /616255/222233/222231  / 1    
2 / step6    /4113292/ ezpz /          /333255/212393/922231  / 1    
2 / step6    /4113292/ ezpz /          /333255/212393/922231  / 1    
3 / step2    /3322234/ PZEZ /          /321938/330200/3O32O   / 1    
4 / step4    /4113292/ ezpz /          /616255/902233/8243231 / 1    
4 / step4    /4113292/ ezpz /          /616255/902233/8243231 / 1    
4 / step4    /4113292/ ezpz /          /616255/902233/8243231 / 1    
5 / step1    /3322234/ PZEZ /          /432938/330200/3O32O   / 1    
5 / step1    /3322234/ PZEZ /          /432938/330200/3O32O   / 1    

使用此表“table_event”插入(或删除)数据(始终使用index = 1)

create view data_aggregate as
select
    id,step,piece,tube,Validate,tool,tool2,tool3,sum(index) as index
from
    data_event
group by
    id,step,piece,tube,Validate,tool,tool2,tool3

id / step    / piece / tube / Validate / tool / tool2 / tool3 / index 
______________________________________________________________________
1 / step3    /4113292/ ezpz / ok       /616255/222233/222231  / 1     
2 / step6    /4113292/ ezpz /          /333255/212393/922231  / 2     
3 / step2    /3322234/ PZEZ /          /321938/330200/3O32O   / 1     
4 / step4    /4113292/ ezpz /          /616255/902233/8243231 / 3
5 / step1    /3322234/ PZEZ /          /432938/330200/3O32O   / 2

使用此表格进行选择

有时候(可能是每天,每小时......)你可以用视图的结果替换table_event的内容(使用事务和中间表)来压缩存储