Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Trigger (varios campos de una tabla)

Estas en el tema de Trigger (varios campos de una tabla) en el foro de Mysql en Foros del Web. Hola, es mi primera pregunta en el foro, pero es que estoy atrancado con un trigger. Ya aprovecho para saludar. El tema es el siguiente: ...
  #1 (permalink)  
Antiguo 23/12/2011, 07:01
 
Fecha de Ingreso: diciembre-2011
Ubicación: Madrid
Mensajes: 5
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Trigger (varios campos de una tabla)

Hola, es mi primera pregunta en el foro, pero es que estoy atrancado con un trigger. Ya aprovecho para saludar.

El tema es el siguiente:
Tengo dos instalaciones de joomla diferentes, en una la web principal, y en otra una un servicio de video parecido a youtube, pero en la que solo los socios de la web principal pueden subir videos.

Entonces mi solucion, fue hacer un TRIGGER de las tres tablas de usuarios de la web principal a las trs tablas de la web de TV, para que cada vez que se haga un alta, automaticamente se de de alta en la web de TV. Tengo MySQL 5.5.8

Y escribí este TRIGGER, este es solo de una de la tres tablas (No son las tablas completas, solo algunos campos de esas tablas):

Código:
DELIMITER $$
CREATE TRIGGER insertar_user AFTER INSERT ON jos_users
  FOR EACH ROW 
   BEGIN
    INSERT INTO xxxxxxxx.jos_users 
       SET 
       	id = NEW.id,
        name = NEW.name, 		
	username = NEW.username, 	
	email = NEW.email, 		
	password = NEW.password, 	
	usertype = NEW.usertype, 	
	block = NEW.block, 		
	sendEmail = NEW.sendEmail, 	
	gid = NEW.gid, 		        
	registerDate = NEW.registerDate, 	
	lastvisitDate = NEW.lastvisitDate, 	
	activation = NEW.activation, 	
	params = NEW.params ;
   END $$
DELIMITER ;
El problema es que me da el siguente error:

#1235 - This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'

Y me saca este codigo (No se si que salga PASSWORD en mayusculas y en color tiene algo que ver):

Código:
DELIMITER $$ CREATE TRIGGER insertar_user AFTER INSERT ON jos_users
FOR EACH
ROW BEGIN
INSERT INTO xxxxxxxx.jos_users
SET id = NEW.id,
name = NEW.name,
username = NEW.username,
email = NEW.email,
PASSWORD = NEW.password,
usertype = NEW.usertype,
block = NEW.block,
sendEmail = NEW.sendEmail,
gid = NEW.gid,
registerDate = NEW.registerDate,
lastvisitDate = NEW.lastvisitDate,
activation = NEW.activation,
params = NEW.params;

END $$DELIMITER;
Agradecería muchisimo cualquier ayuda por que estoy bastante atascado con esto, ya que n¡mi idea es la de hacer varias instalaciones mas de joomla en distintos subdominios para dar otros servicios. Y no puedo estar dando de alta a los nuevos usuarios en 10 paginas distintas.

Un saludo y gracias por adelantado.
  #2 (permalink)  
Antiguo 23/12/2011, 15:40
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 12 años, 10 meses
Puntos: 42
Respuesta: Trigger (varios campos de una tabla)

Hola alejandrosc,

¿Todas las instalaciones de los esquemas/bases de datos de Joomla están en el mismo servidor?

El error que se genera es porque estás tratando que crear más de un (1) trigger para la misma acción sobre las misma tabla, es decir, estas tratando de crear dos (2) triggers 'AFTER INSERT' para la tabla 'jos_users'.
  #3 (permalink)  
Antiguo 26/12/2011, 02:50
 
Fecha de Ingreso: diciembre-2011
Ubicación: Madrid
Mensajes: 5
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Trigger (varios campos de una tabla)

Si, lo tengo todo en el mismo servidor.

¿En tonces no hay manera de hacerlo? ¿No se puede hacer un trigger de varios campos de una tabla? tiene que haber alguna manera de hacerlo.

¿No hay forma de hacerlo dentr de un solo trigger?
  #4 (permalink)  
Antiguo 26/12/2011, 03:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Trigger (varios campos de una tabla)

Cita:
¿En tonces no hay manera de hacerlo? ¿No se puede hacer un trigger de varios campos de una tabla? tiene que haber alguna manera de hacerlo.

¿No hay forma de hacerlo dentr de un solo trigger?
No estás interpretando bien la respuesta:
Lo que no puedes hacer es definir en una misma tabla dos triggers distintos que se disparen con el mismo evento, porque MySQL no sabría cuál es el que tiene que ejecutar. Por eso no se permite que existan.
Eso no quiere decir que no puedas hacer que en un mismo trigger cosas distintas según determinados valores o condiciones que tu mismo codifiques. Pero eso dependerá de tu habilidad para codificarlo.
Trata de ver cómo sería un trigger que pueda hacer lo que tu quieres, según cada caso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 26/12/2011, 03:39
 
Fecha de Ingreso: diciembre-2011
Ubicación: Madrid
Mensajes: 5
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Trigger (varios campos de una tabla)

Lo intentaré, pero si alguien ha hecho algo parecido y sabe como solucionar el problema, se lo agradeceré eternamente.
Por que la verdad es que mi nivel en MySQL es nada mas que regular.
  #6 (permalink)  
Antiguo 26/12/2011, 04:33
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 12 años, 10 meses
Puntos: 42
Respuesta: Trigger (varios campos de una tabla)

Hola alejandrosc,

Te anexo un ejemplo básico y sencillo que te puede ayudar a solventar el problema:

Código MySQL:
Ver original
  1. /*!40101 SET NAMES utf8 */;
  2. /*!40101 SET SQL_MODE=''*/;
  3. /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
  4. /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
  5. /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
  6. /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
  7.  
  8. CREATE DATABASE /*!32312 IF NOT EXISTS*/`principal`;
  9. CREATE DATABASE /*!32312 IF NOT EXISTS*/`secundaria1`;
  10. CREATE DATABASE /*!32312 IF NOT EXISTS*/`secundaria2`;
  11.  
  12. USE `principal`;
  13.  
  14. /*Table structure for table `jos_users` */
  15.  
  16. CREATE TABLE `jos_users` (
  17.   `id` int(11) NOT NULL auto_increment,
  18.   `name` varchar(50) default NULL,
  19.   PRIMARY KEY  (`id`)
  20.  
  21. /* Trigger structure for table `jos_users` */
  22.  
  23. DELIMITER $$
  24.  
  25. /*!50003 CREATE TRIGGER `insertar_user` AFTER INSERT ON `jos_users`
  26. FOR EACH ROW
  27. BEGIN
  28.     insert into secundaria1.jos_users (`id`, `name`) values (new.`id`, new.`name`);
  29.     insert into secundaria2.jos_users (`id`, `name`) values (new.`id`, new.`name`);
  30. END */$$
  31.  
  32. DELIMITER ;
  33.  
  34. USE `secundaria1`;
  35.  
  36. /*Table structure for table `jos_users` */
  37.  
  38. CREATE TABLE `jos_users` (
  39.   `id` int(11) NOT NULL,
  40.   `name` varchar(50) default NULL,
  41.   PRIMARY KEY  (`id`)
  42.  
  43. USE `secundaria2`;
  44.  
  45. /*Table structure for table `jos_users` */
  46.  
  47. CREATE TABLE `jos_users` (
  48.   `id` int(11) NOT NULL,
  49.   `name` varchar(50) default NULL,
  50.   PRIMARY KEY  (`id`)
  51.  
  52. insert into principal.jos_users (`name`) values ('Nuevo Usuario');
  53.  
  54. /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
  55. /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
  56. /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
  57. /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

Etiquetas: campos, sql, tabla, trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:24.