Pretendo que toda vez que inserir uma informação na tabela, ele verifique nos registros se já existe um valor igual ao do insert e altere ele.
Para isso tentei fazer um TRIGGER, mas não consigo informar ao UPDATE o código do registro para ele alterar.
CREATETRIGGERremove_posicaoBEFOREINSERTONnewsFOREACHROWBEGIN//aqui eu procuro saber se o valor do campo passado pelo INSERT já existe.IFEXISTS(selectcod_noticias,posicaofromnewswhereposicao=NEW.posicao)THEN//não consigo pegar o valor da select acima para fazer update em determinado registro.UPDATEnewsSETposicao='5'wherecod_noticias=??????????END
CREATE TRIGGER remove_posicao
BEFORE INSERT ON news
FOR EACH ROW
BEGIN
UPDATE news SET posicao = '5' where cod_noticias = (select cod_noticias from news where posicao = NEW.posicao)
END
mdbatera
Não rodou não, deu o erro:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘END’ at line 9
A
Alberes
Eu acho que isso funciona, cria uma variável e usa a palavrinha máqica INTO.
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTO cod_noti from news where posicao = NEW.posicao)
THEN' at line 11
mdbatera
Eu consegui eliminar os erros, mas ele não está modificando a posicao não, é como se o comando update estivesse lá mas não funciona.
Só para constar, cheguei ao mesmo erro 1442 com o seguinte trigger:
CREATE TRIGGER remove_posicao BEFORE INSERT ON news
FOR EACH ROW
BEGIN
UPDATE news SET posicao = '5' where posicao = new.posicao ;
END
Eu não conhecia essa limitação do MySQL!
Se descobrir uma solução conte pra nós!
Boa sorte!
mdbatera
É jamirdeajr ,
Realmente parece que não tem jeito mesmo!
Pensei em usar o Postgres, mas não gosto muito.
Vou ter que implementar no php mesmo.
Mas se eu souber de algo eu coloco aqui.
Valeu Mesmo!!!
ViniGodoy
Ao postar tópicos ou títulos de tópicos, por favor, DESLIGUE O CAPS LOCK.
Gianetti
No MS SQL Server vc tem as tabelas INSERTED e DELETED, uso as duas para pegar valores que estão sendo inseridos ou atualizados, verifique se no MYSQL tem alguma coisa do genêro, espero ter ajudado.