鍍金池/ 問答/PHP  數(shù)據(jù)庫/ php mysql 訂單消息

php mysql 訂單消息

我現(xiàn)在要查詢未支付的訂單然后發(fā)送消息通知
消息通知規(guī)則:
1:30分鐘未支付的訂單發(fā)送一個消息通知 記錄這個時間點
2:根據(jù)上個時間點 + 2天 如果還是未支付 那么在給用戶發(fā)送一條消息通知
備注:一個用戶最多2條消息通知


訂單表

  • order_sn (訂單編號)
  • user_id(用戶的id)
  • add_time (訂單編號)
  • order_sn (下單時間)
  • pay_status(支付狀態(tài)(1:未支付2:支付成功 3:支付失敗) )
  • msg_count (發(fā)送的消息通知個數(shù))

現(xiàn)在的問題是 如何查詢 30分鐘未支付的訂單 ? 如何查詢上個時間點+2天的訂單我現(xiàn)在考慮的是在新建一張發(fā)送消息通知的數(shù)據(jù)表
表結(jié)構(gòu)如下:

  • user_id (用戶的編號)
  • add_time (發(fā)送消息的時間)

如何更高效查詢數(shù)據(jù)呢? 現(xiàn)在就是查詢數(shù)據(jù)這塊

回答
編輯回答
避風(fēng)港

使用DelayQueue

DelayQueue能做什么?
在我們的業(yè)務(wù)中通常會有一些需求是這樣的:

  1. 淘寶訂單業(yè)務(wù):下單之后如果三十分鐘之內(nèi)沒有付款就自動取消訂單。
  2. 餓了嗎訂餐通知:下單成功后60s之后給用戶發(fā)送短信通知。

那么這類業(yè)務(wù)我們可以總結(jié)出一個特點:需要延遲工作。
由此的情況,就是我們的DelayQueue應(yīng)用需求的產(chǎn)生。
給你個鏈接 http://blog.csdn.net/u0110017... 不過這是JAVA的 不知道PHP 是什么

2017年8月12日 17:18
編輯回答
糖豆豆

要考慮的因素其實挺多的:

  1. 數(shù)據(jù)量、按時支付的比例
  2. 定時的處理(每隔多長時間去判斷未支付,用什么方式定時)
  3. 發(fā)消息(用什么方式發(fā)通知?郵件還是短信?會影響處理能力)

如果拋開這些,僅僅是查詢到期未支持訂單,按你的數(shù)據(jù)結(jié)構(gòu),要查詢下單30分鐘未支付其實很簡單,就是下單時間在當(dāng)前時間30分鐘前,且未支付的(再加上未發(fā)送過通知的)。建好索引一般不會有什么問題。

如果數(shù)據(jù)量不大,可以把發(fā)送消息的時間放到第一張表
那第一次發(fā)消息的條件就是“支付時間在30分鐘前 且 未支付 且 未發(fā)送通知”
第二次發(fā)消息的條件是“未支付 且 已發(fā)送通知 且 上次發(fā)送通知是兩天前”

2017年5月29日 00:41
編輯回答
薄荷綠

這個其實很好處理的,就是根據(jù)時間判斷,用當(dāng)前時間-未支付的訂單的創(chuàng)建時間,如果大于30分鐘就發(fā)送消息;同理當(dāng)前時間-未支付的訂單的創(chuàng)建時間大于2天就發(fā)送消息;每次發(fā)送的時候用你的msg_count記錄一下.這樣子就ok了.

2018年3月16日 09:00
編輯回答
不歸路

題主可以了解一下消息隊列的概念,順便推薦一下rabbitMQ。

2018年8月31日 09:51