2017-10-05 18 views
0

递增行这是我的表根据上一行

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和管的新的一步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 

我这样做是因为当一步是好的我想要进入下一步

+0

我没有看到任何PHP和MySQL,但你标记了你的问题 –

+0

sry我会改变 –

+0

你知道你可以在MySQL中定义一个AUTO INCREMENT字段吗? –

回答

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”的列。

+0

它在小提琴上工作,但我有一个错误在MySQL#1064 - 错误句法''线5 –

+0

那是什么?尝试使用分隔符。 – wast

+0

它是var maxindex我无法声明“DECLARE maxIndex INT DEFAULT -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” 为插入(或删除)的数据(总是具有索引= 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的内容来压缩s torage