我在系统中有定期付款方式。一切都很好,API成功响应记录在数据库中。 我的问题是,我即将自动化系统的后续付款操作(不幸的是,支付网关不支持)。 通过cron,我将安排检查后续流程和通知中是否必须包含哪些帐户。 我这里有一个数据库条目:
+---------------------+---------------------+--------------------+
| 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 :(得分: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);
答案 1 :(得分:3)
SELECT group_concat(transaction_number) as transaction_number
FROM tab
WHERE payment_date BETWEEN CURRENT_DATE AND CURRENT_TIMESTAMP
您可以使用它来返回一个字符串,并使用perl分割字符串并传递给curl。
sqlfiddle here。
答案 2 :(得分:1)
如果您希望表格中显示的所有记录对当前时间有效 - 而有效则表示payment_date早于现在且payment_expirydate晚于现在,您可以使用:
SELECT transaction_number from `table`
WHERE payment_date > now()
AND payment_expirydate < now();
这会得到你想要的吗?