根据上一行增加一行
increment a line according to the previous line
这是我的 table
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”作为默认值,因为每个第一个插入都是 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".
的列
像这样创建一个 "data_event" table :
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 "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 用于 select
有时(可能是每天,每小时...)你可以用视图的结果(使用事务和中间table)替换table_event的内容来压缩存储
这是我的 table
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”作为默认值,因为每个第一个插入都是 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".
的列像这样创建一个 "data_event" table :
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 "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 用于 select
有时(可能是每天,每小时...)你可以用视图的结果(使用事务和中间table)替换table_event的内容来压缩存储