【问题标题】:monitoring mysql table for orders and storing orders history监控 mysql 表中的订单并存储订单历史记录
【发布时间】:2012-05-14 22:31:53
【问题描述】:
  1. 我有一些网站,当用户可以点击“订单”并将他的订单保存到订单表时。
  2. Orders 表有 3 个字段:iduser_idbook_id

我需要一些脚本来监控订单表中的变化 - 如果出现一些订单,它将读取它们、“执行”并从订单表中删除。

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

我使用 MySQL 5.0 数据库...

--------- 编辑

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

【问题讨论】:

  • 触发器是你的朋友。 dev.mysql.com/doc/refman/5.0/en/triggers.html
  • 您没有在数据库中创建触发器的权限吗?您至少需要更新权限才能将订单标记为已处理。
  • 男人 - 阅读! - 我必须执行一些 PHP 代码 - 我不能在触发器中执行此操作 - 或者我错了?

标签: php mysql sql


【解决方案1】:

你需要一个触发器。这样的事情会起作用。

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

MySQL Trigger documentation。 我还发现这个tutorial 很有帮助。

至于你的第二个问题,这取决于你的要求。如果您需要完整的可审计历史记录,您可能应该将更改复制到新表中。如果你不这样做,添加一个 order_status 并将值从 open 更改为 complete 会减少工作量。

【讨论】:

  • 但是我必须运行一些 php 脚本来处理订单——而且我知道我不能从触发器中做到这一点......
  • php 脚本是与其他程序交互还是仅与数据库交互?
  • 脚本使用纯 php 来读取订单表和 foreach 订单处理订单 - 订单处理使用一些 php 库 + mysql 查询。这个脚本的目的是它可以在用户点击“订单”时运行,但处理订单需要一些时间,所以我希望它由一些外部脚本来完成,该脚本将处理所有未处理的订单......
  • 如上所说,在表中添加状态列,并在脚本中查询打开状态。取单后,将状态翻转为已关闭。
  • 好吧,没关系,但主要问题是如何实现外部脚本/程序来监控是否有任何订单被添加到订单表中以立即处理它们..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 2020-10-30
  • 2017-02-03
  • 1970-01-01
相关资源
最近更新 更多