2012-03-29 14 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

このクエリは、今日期限切れにすべてのレコードを返します。使用 -

$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(); 

それはあなたが望むものを手に入れますか?

SELECT * 
FROM accounts 
WHERE payment_expirydate BETWEEN CURRENT_DATE AND CURRENT_TIMESTAMP 

CodeIgniterのAR実装について次のことができるようにすべきである - あなたはすべてのアカウントは、現在の時刻よりも、今日はあまり有効期限が切れる場合

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

-

+0

ありがとうD Mac ... –

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

+1

あなたの質問を修正したので、前のコメントを削除しました。 – nnichols

+0

+1は良いスポーツで、速い回答者=) – cctan