2012-03-29 2 views
3

Ich habe einen wiederkehrenden Zahlungsmodus im System. Alles ist gut, API-erfolgreiche Antwort wird in der Datenbank protokolliert. Das Anliegen meiner Frage ist, ich bin dabei, die nachfolgende Zahlungsaktion des Systems zu automatisieren (die leider das Zahlungsgateway nicht unterstützt). Via Cron werde ich eine Prüfung einplanen, ob welche Konten in den nachfolgenden Prozess einbezogen werden müssen und notieren. Ich habe hier einen Ausschnitt aus dem Datenbankeintrag:mysql datetime Bereich wählen

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

ich eine Schwierigkeit für diese bei der Erstellung der SQL-Abfrage habe. Angenommen, das Datum heute ist 2012-05-16 und die Zeit ist 07:00:00. Ich möchte alle Konten, die heute und weniger als die aktuelle Zeit ist. Zum Beispiel ist das einzige gültige Konto (basierend auf dem aktuellen Datum und der Uhrzeit, das ich angegeben habe), das ich benötige, das Konto 1-69010235.

Auch irgendwelche Tipps, in welchem ​​Intervall sollte ich meinen Cron setzen?

+0

'wählen * aus der Tabelle, wo jetzt()> unix_timestamp (payment_expirydate)' – safarov

+0

Wie füttern Sie die Liste des heutigen Kontos mit dem Zahlungsaktionssystem? – cctan

+0

danke, aber dies wird ganze Konten vor dem Datum zurückgeben. Gibt es eine Idee, nur die Konten nur auf dem aktuellen Datum zurückzugeben? –

Antwort

6

, die heute verfallen -

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

Wenn Sie alle Konten abläuft heute wollen, aber weniger als die aktuelle Zeit -

SELECT * 
FROM accounts 
WHERE payment_expirydate BETWEEN CURRENT_DATE AND CURRENT_TIMESTAMP 

Für AR-Implementierung codeigniter sollten Sie in der Lage sein, Verwendung -

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

In der Tat. Danke dafür! –

+0

Wie kann ich das in codeigniter active records verwenden? –

+0

Ich habe CI AR Beispiel zu meiner Antwort hinzugefügt. Hoffe das funktioniert für dich. Ich habe es nicht versucht, da ich CI nicht verwende. – nnichols

1

Wenn Sie wollen, dass alle Datensätze in der Tabelle, die Sie zeigen, dass für den aktuellen Zeitpunkt gültig sind - und gültig bedeutet, dass die payment_date früher als jetzt und payment_expirydate später als jetzt können Sie verwenden:

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

Erhält das, was Sie wollen? Diese Abfrage wird alle Datensätze zurück

+0

Danke D Mac ... –

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

Sie können dies verwenden, um eine Zeichenfolge zurückzugeben und Perl zu verwenden, um die Zeichenfolge zu teilen und an curl zu übergeben.

sqlfiddle here.

+0

gibt es auch den Fall, dass keine Minuten bearbeitet werden, bearbeitet – cctan

+1

Ich habe meinen vorherigen Kommentar jetzt entfernt, dass Sie Ihre Abfrage geändert haben. – nnichols

+0

+1 für einen guten Sport und schnelle Beantworter =) – cctan