2012-12-20 151 views
3

我想在使用PHP对我的mysql表进行一些更改时在屏幕上触发警报。mysql - 触发器表更改

目前,我有很多不同结构的表(采购订单,销售订单,用户等),我的意图是做一个实时应用程序,但问题是我已经写了90%的应用程序。

我有名称的表activity 它包含:

id, table, action, dateTime, user

当某些更改了Purchase Order表进行,那么我需要登录

(0,'TABLE A','INSERT','12/12/12','John')

让我可以显示JOHN created a new Purchase Order

请注意,我已经编写了应用程序的很多部分,最有可能实现这个目标的方法是什么?

+0

创建一个新的表,EVENTS,将数据库的所有CRUD事件存储在EVENTS表中,使用长轮询或Web套接字来获取发生的最新事件。 – Joddy

+0

以上建议需要一点工作(更多触发器)。您可以尝试创建一个将继续运行的守护进程,并将读取并将新插入的内容存储在指定的表中。 – Joddy

+0

感谢您的建议,问题是我需要首先收集数据,我已经编写了应用程序,我期望通过独立方式实现这一点,而不必对现有源代码进行很多更改。 – Red

回答

1

如果你的问题是如何登录活动的变化表,那么你可以在每个表中创建触发器,你想要的(订单,销售,用户等)来监视这样的:

CREATE TRIGGER `tg_orders_insert` AFTER INSERT ON orders 
    FOR EACH ROW INSERT INTO `activity` (`id`, `table`, `action`, `date_time`, `user`) VALUES (NEW.id, 'orders', 'insert', NOW(), 'user1') 

CREATE TRIGGER `tg_orders_update` AFTER UPDATE ON orders 
    FOR EACH ROW INSERT INTO `activity` (`id`, `table`, `action`, `date_time`, `user`) VALUES (NEW.id, 'orders', 'update', NOW(), 'user1') 

CREATE TRIGGER `tg_orders_delete` BEFORE DELETE ON orders 
    FOR EACH ROW INSERT INTO `activity` (`id`, `table`, `action`, `date_time`, `user`) VALUES (OLD.id, 'orders', 'delete', NOW(), 'user1')