2012-03-29 6 views
3

У меня есть повторяющийся режим оплаты в системе. Все хорошо, успешный ответ API регистрируется в базе данных. Меня беспокоит вопрос: я собираюсь автоматизировать последующие действия по оплате (к сожалению, платежный шлюз не поддерживает) системы. Через cron Я планирую проверку того, какие учетные записи должны быть включены в последующий процесс и уведомление. я здесь надрез в записи базы данных:mysql datetime range select

+---------------------+---------------------+--------------------+ 
| 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

+0

как вы скопируете список сегодняшней учетной записи в систему действий платежа? – cctan

+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 

Для реализации AR CodeIgniter Вам необходимо быть в состоянии использование -

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

Действительно. Спасибо за это! –

+0

Как я могу использовать это в активных записях codeigniter? –

+0

Я добавил пример CI AR к моему ответу. Надеюсь, что это работает для вас. Я не пробовал, так как я не использую CI. – nnichols

1

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

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

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

+0

Спасибо D Mac ... –

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

Вы можете использовать это, чтобы вернуть строку и использовать perl для разделения строки и перехода к завиту.

sqlfiddle here.

+0

есть также случай не обрабатывать минуты, отредактирован – cctan

+1

Я удалил свой предыдущий комментарий, теперь вы изменили свой запрос. – nnichols

+0

+1 для хорошего спорта и быстрого ответа =) – cctan