2017-10-05 23 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