2012-05-14 66 views
0
  1. 我有一些网站,当用户点击“订单”,他的订单我保存到订单表。
  2. 订单表有3个字段:id,user_id,book_id

我需要一些脚本来监视订单表中的更改 - 如果出现某些订单,它将读取它们,执行并从订单表中删除。监控mysql表的订单和存储订单历史

我该如何有效地做到这一点?我以前从未做过这样的事情 - 我想过一些将在一定时间间隔内执行的PHP脚本(10-15秒 - 它必须快)并读取订单表。但后来我认为我必须保留订单历史记录 - 还有第二个问题 - 我应该为订单历史记录创建第二个表还是只添加字段“完成”到订单表?我一次问这两个问题,因为它们是相互关联的 - 也许当我的订单表中包含完成的订单时,我的脚本查询它将是不够高效的。我正在寻找最佳解决方案。

我使用MySQL 5.0 DATABSE ...

----------编辑

我不能使用触发器 - 我必须执行一些PHP脚本来处理订单时,他们出现在订单表中!

+0

触发器是你的朋友。 http://dev.mysql.com/doc/refman/5.0/en/triggers.html – 2012-05-14 22:37:14

+0

你没有权限在数据库中创建触发器吗?至少您需要更新权限才能将订单标记为已处理。 – kirbs

+0

男人 - 读! - 我必须执行一些PHP代码 - 我不能在触发器中执行此操作 - 或者我错了? – user606521

回答

2

您需要一个触发器。像这样的东西会奏效。

create trigger newOrderTrigger after insert on order_table for each row 
//you order execution code goes here 

请参阅MySQL Trigger documentation。 我也发现这个tutorial有帮助。

至于你的第二个问题,这取决于你的要求。如果您需要完整的可审计历史记录,则应该将更改复制到新表中。如果您不这样做,那么添加一个order_status并将其值从打开改为完成是不够的。

+0

但我必须运行一些PHP脚本来处理订单 - 并且我知道我无法从触发器中执行它... – user606521

+0

php脚本是与其他程序还是只与数据库交互? – kirbs

+0

脚本使用纯php来读取订单表和foreach它处理订单 - 订单处理使用一些php库+ mysql查询。这个脚本的目的是当用户点击“订单”时它可以运行,但是它需要一些时间来处理订单,所以我希望它可以通过一些外部脚本完成,它将处理所有未处理的订单... – user606521