mysql выбор даты и времени - PullRequest
3 голосов
/ 29 марта 2012

У меня есть режим повторяющихся платежей в системе.Все хорошо, успешный ответ 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 бежать?

Ответы [ 3 ]

6 голосов
/ 29 марта 2012

Этот запрос вернет все записи, срок действия которых истекает сегодня -

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

Для реализации AR codeigniter вы должныуметь пользоваться -

$this->db->where('payment_expirydate BETWEEN CURRENT_DATE AND CURRENT_TIMESTAMP', NULL, FALSE);
3 голосов
/ 29 марта 2012
SELECT group_concat(transaction_number) as transaction_number
FROM tab
WHERE payment_date BETWEEN CURRENT_DATE AND CURRENT_TIMESTAMP

Вы можете использовать это для возврата строки и использовать Perl для разделения строки и перехода к curl.

sqlfiddle здесь .

1 голос
/ 29 марта 2012

Если вы хотите, чтобы все показанные в таблице записи действительны для текущего времени - и действительные означают, что date_date Payment раньше, чем сейчас, а payment_expirydate позже, чем сейчас, вы можете использовать:

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

Получает ли это то, что вы хотите?

...