Título: trigger Publicado por: basickdagger en 8 Marzo 2013, 18:45 pm como podria hacer un trigger, para un update q en una tabla me modifique de 0 a 1
por ejemplo tengo [id] [nombre] [valor] 1 lunes 0 2 martes 0 3 miercoles 1 y si doy un update a valor colocando un 1 en lunes, en miercoles cambie a 0 Título: Re: trigger Publicado por: cassiani en 8 Marzo 2013, 22:37 pm quieres que todos los demas campos cambien a cero o solo ese en especifico?
Haz un update dentro del disparador que actualice todo a cero, menos el registro recien actualizado. algo como: Código
guiate de ahí. Título: Re: trigger Publicado por: basickdagger en 9 Marzo 2013, 00:48 am quieres que todos los demas campos cambien a cero o solo ese en especifico? Haz un update dentro del disparador que actualice todo a cero, menos el registro recien actualizado. algo como: Código
guiate de ahí. si quiero q todos se pongan en cero excepto el q puse en 1 disculpa mi ignorancia pero en esta parte id<>OLD.id q viene siendo OLD? Título: Re: trigger Publicado por: Carloswaldo en 11 Marzo 2013, 05:23 am OLD contiene el valor antiguo del registro (el que tiene antes del update) aunque en este caso creo que también se debería incluir en la función del trigger algo que valide que se está cambiando el valor a 1 (el ejemplo de cassiani está bien, pero también se ejecutaría cuando se haga un UPDATE mi_tabla SET valor=0, lo cual no sería un problema en una tabla pequeña, pero si es grande se consumiría recursos innecesariamente en el FOR EACH), agregando un IF NEW.valor = 1 sería suficiente.
Yo lo haría así: Código
Tambíen se podría agregar AND OLD.valor=0 en el IF como validación adicional asumiendo que esta validación no se hace en la aplicación. ;D Título: Re: trigger Publicado por: basickdagger en 11 Marzo 2013, 18:34 pm gracias por su ayuda, una ultima cosa si quisiera agregar una condicion mas por ejemplo un where tipo = "Xcosa" seria asi...???
Código:
Título: Re: trigger Publicado por: Carloswaldo en 11 Marzo 2013, 19:41 pm Hola
Sí, la condición que has agregado en el código está bien para lo que quieres hacer. Por otro lado, un trigger no es lo mismo que un procedure, te recomiendo que investigues sobre su diferencia, no es que uno sea más rápido que el otro sino que se usan para distintos propósitos. Título: Re: trigger Publicado por: basickdagger en 11 Marzo 2013, 20:55 pm gracias por la respuesta pero me salio un error...
#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 'IF NEW.fav=1 THEN UPDATE anuncio SET fav= 0; END IF' at line 3 este es mi script Código:
mi tabla se llama anuncio y tiene un atributo integer not null llamado fav q estoy haciendo mal?? tambien intente hacerlo con la herramienta de phpMyAdmin pero al modificar me arroja un error le doy click y no sale nada pero tampoco modifica nada... Título: Re: trigger Publicado por: Carloswaldo en 11 Marzo 2013, 22:32 pm Ah, me he confundido un poco (en realidad mucho xD), pensé que en MySQL también había algo como FOR EACH STATEMENT, tampoco tenía MySQL instalado para probar. Debería ser así:
Código
PERO Código: #1442 - Can't update table 'anuncio' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. Pues Citar B.5.9: Can triggers access tables? A trigger can access both old and new data in its own table. A trigger can also affect other tables, but it is not permitted to modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger. http://dev.mysql.com/doc/refman/5.5/en/faqs-triggers.html#qandaitem-B-5-1-9 Así que para este caso creo que no podrás usar un trigger, tal vez deberías usar un store procedure y en vez de hacer UPDATE directamente en la tabla llamarías al procedure, algo como update_anuncio(int id, int estado) Título: Re: trigger Publicado por: basickdagger en 12 Marzo 2013, 07:32 am hehe muchas gracias a eso me referia con lo de cual seria mas rapido, probare hacer un procedure y comento si me funciono gracias por tomarte el tiempo en ayudarme ;)
|