Ver Mensaje Individual
  #8 (permalink)  
Antiguo 08/10/2011, 07:44
Avatar de J_de_Prado
J_de_Prado
 
Fecha de Ingreso: junio-2011
Ubicación: Alpedrete, Madrid,España
Mensajes: 28
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Provocar un update con dos filas de la misma tabla

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Por otro lado un tema de lógica de INSERT: Si estás haciendo una comparación dentro del propio INSERT, ¿por qué no resuelves eso en la programación de la aplicación y le quitas a la base una responsabilidad que no se necesita?
A fin de cuentas esa validación bien la puedes hacer antes de enviar los datos, ya que sólo estás operando con los VALUE que mandas en el mismo INSERT.
Mi intención es que “esto” que estoy intentando desarrollar funcione en un servidor de Internet y la plataforma de acceso sea a través de PHP, (además de para PC también para teléf. móvil o celular si lo prefiere) y por lo que he leído sobre PHP y MYSQL creo que por temas de de seguridad todo lo que haga la BD por si misma puede que evite tener que dar determinados permisos a los usuarios normales de la Web. En [URL="http://dev.mysql.com/doc/refman/5.1/en/stored-programs-security.html"]Access Control for Stored,[/URL] se dicen cosas a las que se le puede sacar provecho en temas de seguridad, o al menos eso creo...

Cita:
si no
Código MySQL:
Ver original
  1. NEW.c_mess = NEW.`c_mess` AND NEW.m_to = NEW.id_user AND NEW.id_user = NEW.`m_to`
En un TRIGGER los únicos parámetros que existen son o bien los campos del registroo entrante (INSERT y UPDATE) o los del antiguo (UPDATE y DELETE). Pero siempre, en todos los casos su nombre debe estar precedido por NEW u OLD, según el caso.
Con este código a mi me parece que lo que hace es comparar sobre los mismos datos que se insertan, así que he pensado lo que escribo mas abajo.

Cita:
Cualquier otro nombre debe ser, o bien una variable local declarada, o un campo de una tabla invocada en una sentencia dentro del TRIGGER (que no puede ser la propia tabla).
Cambiar de versión de MySQL no alterará nada, porque el error no es de versiones sino que estás escribiendo mal la invocación a los campos.
Viendo la imposibilidad de comparar en un trigget los campos que se van a insertar, con todas las filas de la propia tabla, ahora estoy probando a comparar datos con otra tabla que sea idéntica a la portadora del trigger, creo que seria una forma de 'burlar' las limitaciones que hay para utilizar los datos de la tabla que porta el trigger, luego esta se va vaciando
Insisto en lo del triger por lo que se dice en el tema seguridad pues al parecer se ejecuta con los permisos del creador.
Después de crear otra tabla (envios) lo que actualmente me esta dando problemas la manera de referirme al campo de una tabla diferente. lo estoy intentando con comillas y si ellas , pero me dice que mas o menos :ERROR 1109: Unknown table 'envios' in field list
¿Hay que utilizar alias? ¿Si es asi se pone en dentro del trigger? he buscado y no encuentro un ejemplo de cita a otra tabla dentro de un IF.


Código MySQL:
Ver original
  1. TRIGGER `base5`.`enviados`
  2. BEFORE INSERT ON `base5`.`enviados`
  3.  #no confundir enviados con envios
  4. IF  NEW.c_mess = envios.c_mess  AND NEW.m_to = envios.id_user AND NEW.id_user = envios.m_to
  5. # este update lo tengo por que es fácil de comprobar si funciona lo anterior
  6. UPDATE `base5`.`usuarios` SET `acces`= CURRENT_TIMESTAMP WHERE`id_user`='1';
  7. END$$