2017-10-05 23 views
0

Ceci est ma tableincrémenter une ligne en fonction de la ligne précédente

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 

Je veux augmenter l'indice quand j'ajoute une nouvelle étape (avec un insert) qui a le même tube et la pièce.

pour exemple:

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 

et si j'ajoute une nouvelle étape pour pièce 4113292 et le tube EZPZ Je veux ceci:

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 

ou si j'ajoute une nouvelle étape pour la pièce 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 

Je fais cela quand une étape est ok Je veux passer à l'étape suivante

+0

Je ne vois pas de php ni mysql mais vous avez tagué votre question avec ça –

+0

sry Je vais changer –

+0

Vous savez que vous pouvez définir un champ AUTO INCREMENT dans MySQL? –

Répondre

0

Exemple d'insertion de l'utilisateur - à la place un "?" mettre « 0 » comme valeur par défaut, parce que chaque premier insert sera 0.

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

Lorsque vous faites un insert à nouveau avec la même pièce et le tube, ce déclencheur devrait faire le travail.

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; 

Testé dans SQL Fiddle.

P.S. J'ai dû renommer "index" en "index1" car SQL Fiddle ne fonctionne pas avec la colonne "index".

+0

ça marche sur le violon mais j'ai une erreur sur mysql # 1064 - syntaxe d'erreur '' ligne 5 –

+0

De quelle ligne s'agit-il? Essayez avec un délimiteur. – wast

+0

c'est le var maxindex que je ne peux pas déclarer "DECLARE maxIndex INT DEFAULT -1" –

0

créer une table "data_event" comme ceci:

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  

Utilisez ce tableau "table_event" pour l'insertion (ou supprimer) des données (toujours avec 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 

Utilisez ce tableau pour sélectionner

Parfois (peut-être tous les jours, toutes les heures ...) vous pouvez remplacer le contenu de table_event par le résultat de la vue (en utilisant une transaction et une table intermédiaire) pour compresser s torage