php mysql 订单消息

Randy
  • 911

我现在要查询未支付的订单然后发送消息通知
消息通知规则:
1:30分钟未支付的订单发送一个消息通知 记录这个时间点
2:根据上个时间点 + 2天 如果还是未支付 那么在给用户发送一条消息通知
备注:一个用户最多2条消息通知


订单表

  • order_sn (订单编号)
  • user_id(用户的id)
  • add_time (订单编号)
  • order_sn (下单时间)
  • pay_status(支付状态(1:未支付2:支付成功 3:支付失败) )
  • msg_count (发送的消息通知个数)

现在的问题是 如何查询 30分钟未支付的订单 ? 如何查询上个时间点+2天的订单我现在考虑的是在新建一张发送消息通知的数据表
表结构如下:

  • user_id (用户的编号)
  • add_time (发送消息的时间)

如何更高效查询数据呢? 现在就是查询数据这块

回复
阅读 1.9k
4 个回答
✓ 已被采纳

要考虑的因素其实挺多的:

  1. 数据量、按时支付的比例
  2. 定时的处理(每隔多长时间去判断未支付,用什么方式定时)
  3. 发消息(用什么方式发通知?邮件还是短信?会影响处理能力)

如果抛开这些,仅仅是查询到期未支持订单,按你的数据结构,要查询下单30分钟未支付其实很简单,就是下单时间在当前时间30分钟前,且未支付的(再加上未发送过通知的)。建好索引一般不会有什么问题。

如果数据量不大,可以把发送消息的时间放到第一张表
那第一次发消息的条件就是“支付时间在30分钟前 且 未支付 且 未发送通知”
第二次发消息的条件是“未支付 且 已发送通知 且 上次发送通知是两天前”

题主可以了解一下消息队列的概念,顺便推荐一下rabbitMQ。

这个其实很好处理的,就是根据时间判断,用当前时间-未支付的订单的创建时间,如果大于30分钟就发送消息;同理当前时间-未支付的订单的创建时间大于2天就发送消息;每次发送的时候用你的msg_count记录一下.这样子就ok了.

李晓飞
  • 3
新手上路,请多包涵

使用DelayQueue

DelayQueue能做什么?
在我们的业务中通常会有一些需求是这样的:

  1. 淘宝订单业务:下单之后如果三十分钟之内没有付款就自动取消订单。
  2. 饿了吗订餐通知:下单成功后60s之后给用户发送短信通知。

那么这类业务我们可以总结出一个特点:需要延迟工作。
由此的情况,就是我们的DelayQueue应用需求的产生。
给你个链接 http://blog.csdn.net/u0110017... 不过这是JAVA的 不知道PHP 是什么

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏