2012-03-29 187 views
3

我在系統中有定期付款方式。一切正常,API成功響應會記錄在數據庫中。 我的問題的關注點是,我即將自動化系統的後續付款操作(不幸的是,支付網關不支持)。 通過cron我會安排檢查是否必須在隨後的過程中包含哪些帳戶和通知。 我這裏的數據庫條目的剪斷:mysql日期時間範圍選擇

+---------------------+---------------------+--------------------+ 
| payment_date  | payment_expirydate | transaction_number | 
+---------------------+---------------------+--------------------+ 
| 2012-02-14 03:47:15 | 2012-05-14 03:47:15 | 1-67815163   | 
| 2012-02-16 00:53:03 | 2012-05-16 00:53:03 | 1-69010235   | 
| 2012-02-16 08:57:16 | 2012-05-16 08:57:16 | 1-69027483   | 
| 2012-02-16 09:08:06 | 2012-05-16 09:08:06 | 1-69027694   | 
| 2012-02-16 09:58:17 | 2012-05-16 09:58:17 | 1-69028921   | 
| 2012-02-17 09:28:32 | 2012-05-17 09:28:32 | 1-69072076   | 
| 2012-02-17 06:17:45 | 2012-05-17 06:17:45 | 1-69068200   | 
| 2012-02-17 11:12:08 | 2012-05-17 11:12:08 | 1-69074788   | 
+---------------------+---------------------+--------------------+ 

我有創建此SQL查詢困難。假設今天的日期是2012-05-16和時間是07:00:00。我想要獲得所有當前且小於當前時間的帳戶。例如,我需要的唯一有效帳戶(基於我指出的當前日期和時間)是帳戶1-69010235

此外,任何提示,如果在什麼時間間隔,我應該設置我的cron運行?

+0

'select * from table where now()> unix_timestamp(payment_expirydate)' – safarov 2012-03-29 09:47:40

+0

如何將今天的賬戶列表提供給付款操作系統? – cctan 2012-03-29 09:53:23

+0

謝謝,但這將返回日期前的整個帳戶。任何想法只返回類似於當前日期的帳戶? – 2012-03-29 09:54:06

回答

6

這個查詢將返回今天到期的所有記錄 - 如果你希望所有的帳目,但不到期比當前時間

SELECT * 
FROM accounts 
WHERE payment_expirydate BETWEEN CURRENT_DATE AND (CURRENT_DATE + INTERVAL 1 DAY - INTERVAL 1 SECOND) 

-

SELECT * 
FROM accounts 
WHERE payment_expirydate BETWEEN CURRENT_DATE AND CURRENT_TIMESTAMP 

對於CodeIgniter的AR實現你應該能夠使用 -

$this->db->where('payment_expirydate BETWEEN CURRENT_DATE AND CURRENT_TIMESTAMP', NULL, FALSE); 
+0

確實。感謝你! – 2012-03-29 10:33:50

+0

如何在codeigniter活動記錄中使用此功能? – 2012-03-30 10:41:24

+0

我已將CI AR示例添加到我的答案中。希望這對你有用。我沒有嘗試過,因爲我沒有使用CI。 – nnichols 2012-03-30 10:48:46

1

如果你希望所有在你看錶的有效期爲當前時間的記錄 - 和有效指PAYMENT_DATE比現在更早,payment_expirydate晚於現在,你可以使用:

SELECT transaction_number from `table` 
WHERE payment_date > now() 
AND payment_expirydate < now(); 

這是否得到你想要的?

+0

謝謝D Mac ... – 2012-03-29 10:34:36

3
SELECT group_concat(transaction_number) as transaction_number 
FROM tab 
WHERE payment_date BETWEEN CURRENT_DATE AND CURRENT_TIMESTAMP 

您可以使用它返回一個字符串並使用perl來分割字符串並傳遞給curl。

sqlfiddle here

+0

還有沒有處理分鐘的情況,編輯 – cctan 2012-03-29 10:13:22

+1

我已經刪除了我以前的評論,現在你已經修改了你的查詢。 – nnichols 2012-03-29 10:14:39

+0

+1是一個很好的運動和快速回復=) – cctan 2012-03-29 10:17:45