oka Posted January 27, 2013 Share Posted January 27, 2013 (edited) Hola a todos. Estoy intentando ejecutar un trigger de mysql en el evento update de la tabla ps_product. Creamos una tabla llamada "tigre": create table tigre (ref varchar(255), price float); Creamos el disparador: create trigger mi_tigre after update on ps_product for each row BEGIN insert into tigre (ref,price) VALUES (NEW.reference, NEW.price); END; // La idea es que cuando se cambie algo de la ficha de un producto (sin combinaciones) se ejecute el trigger y meta en la tabla "tigre" la referencia del producto y el nuevo precio. El Trigger funciona, cuando en el BO modifico un precio de un artículo, el disparador se ejecuta y me inserta en la tabla "tigre" la referencia del producto y su precio, pero lo hace 3 veces por cada update: mysql> select * from tigre// +-----------+---------+ | ref | price | +-----------+---------+ | G-DGG1 | 80.1653 | | G-DGG1 | 80.1653 | | G-DGG1 | 80.1653 | +-----------+---------+ ¿Sabéis por qué inserta 3 líneas en vez de una sola? Un saludo. Edited January 27, 2013 by oka (see edit history) Link to comment Share on other sites More sharing options...
nadie Posted January 27, 2013 Share Posted January 27, 2013 Por normas del foro, tema movido a Discusión General. Link to comment Share on other sites More sharing options...
oka Posted January 27, 2013 Author Share Posted January 27, 2013 ¡Aquí se cambia el papel ! Pon aquí tus modulos gratis, pequeñas sobrecargas, optimizacion y otros codigos que cambian la vida y que deseas compartir con otros miembros. Vaya pensaba que estaba bien puesto en la sección en la que lo puse.... Link to comment Share on other sites More sharing options...
nadie Posted January 27, 2013 Share Posted January 27, 2013 Vaya pensaba que estaba bien puesto en la sección en la que lo puse.... La sección de: "Modulos gratis, sobrecargas y otras astucias que cambian la vida", es para cuando se publican aportes completos y funcionales. Las dudas, se preguntan en la secciones de "Discusión General" o "Instalación, configuración y actualización" Un Saludo PD: Ademas, date cuenta que en la sección de "Discusión General", tu duda sera mas visible, para todos los usuarios. Link to comment Share on other sites More sharing options...
oka Posted January 27, 2013 Author Share Posted January 27, 2013 Hola a todos. No sé por qué me inserta 3 veces por cada update en la tabla "tigre", de todas formas la idea es: Cuando se actualice el precio de un producto (sin combinaciones) en el BO de prestashop actualizar la tabla llx_product de Dolibarr. El código que funciona es este (aunque hay que afinar los decimales con round) Trigger ps_product actualiza tabla llx_product dolibarr mysql> delimiter | mysql> CREATE TRIGGER price_presta_doli AFTER UPDATE ON prestashop.ps_product -> FOR EACH ROW -> BEGIN -> update erp.llx_product set price = NEW.price WHERE ref = OLD.reference; -> END; -> | Obviamente hay que tener previamente cargados todos los productos de prestashop en dolibarr, eso es fácil de hacer con moussiq o con el módulo All4doli. Un saludo Link to comment Share on other sites More sharing options...
oka Posted January 27, 2013 Author Share Posted January 27, 2013 Hola Oka y con un LIMIT 1 ¿no valdría? o dandole a la columna ref indice unico... no se si valdria... Saludos Hola Statictic, eso es precisamente las dos cosas que he intentado, tanto ponerle UNIQUE al campo referencia como pasarle un limit 1 se queda el BO congelado al actualizar un precio. Es raro, es como si cuando prestashop actualiza algo de la ficha de producto desde el BO hace que el trigger se ejecute 3 veces. Cosa que no pasa con el trigger que tengo para actualizar los precios en la BBDD de dolibarr si se modifica en el BO de presta. Un saludo. Link to comment Share on other sites More sharing options...
oka Posted January 27, 2013 Author Share Posted January 27, 2013 El "triplicado" lo inserta en la tabla tigre cada vez que modifico un precio en la pestaña de un producto y le doy a salvar, con lo que prestashop hace un "update table ps_product set price = $price where id_product = 33" y se supone que el trigger se ejecuta una sola vez por cada update que hace prestashop. El caso es que por cada update se triplica en la tabla tigre los valores, raro raro..... De todas formas activaré el log de mysql para ver qué hace por debajo con esa consulta. Un saludo Link to comment Share on other sites More sharing options...
oka Posted February 1, 2013 Author Share Posted February 1, 2013 (edited) Hola Statictic no me había fijado en tu edición, si hacemos eso cuando insertas da un error de duplicate key (que se puede solventar con un REPLACE o con un ON DUPLICATE KEY UPDATE) pero he abandonado el tema de actualizar directamente dolibarr desde prestashop "al vuelo". Por cierto tengo un trigger funcionando porque necesito saber la última fecha de modificación de un producto y prestashop no actualiza el campo ps_product.date_upd con el timestamp cuando modificas una combinación, es decir si modificas el stock de la ficha de un producto el campo ps_product.date_upd se actualiza, si modificas el stock de una combinación de ese producto no se actualiza. DELIMITER | CREATE TRIGGER fecha_mod_prod AFTER UPDATE ON ps_product_attribute FOR EACH ROW BEGIN update ps_product set date_upd = NOW() where id_product = OLD.id_product; END| Un saludo. Edited February 1, 2013 by oka (see edit history) Link to comment Share on other sites More sharing options...
petete2008 Posted February 2, 2013 Share Posted February 2, 2013 Has dado con la solución? Link to comment Share on other sites More sharing options...
oka Posted February 2, 2013 Author Share Posted February 2, 2013 Hola Pepete2008, te refieres a la solución del trigger que actualiza la table "tigre" desde prestashop ? No lo he vuelto a mirar, pero creo que con pasarle un Limit 1 funcionaría. create trigger mi_tigre after update on ps_product for each row BEGIN insert into tigre (ref,price) VALUES (NEW.reference, NEW.price) LIMIT 1; END; // Un saludo Link to comment Share on other sites More sharing options...
petete2008 Posted February 3, 2013 Share Posted February 3, 2013 Si, preguntaba por el problema del "triplicado". Si lo has solucionado con el LIMIT 1 genial!! Gracias por compartir!! Link to comment Share on other sites More sharing options...
Recommended Posts