2012-01-31 9 views
0

私はCodeIgniterの一部の学生キャビンの予約システムを構築しています。物事は一緒になって始めているが、私は解決すべき小さな問題がある。予約システムの「期限切れ」予約を削除する最も良い方法

お支払いの直前に、その予約はデータベースに追加され、datetime-fieldは0に設定されます。このフィールドは、支払いが確定した(paypalから)現在の時刻を取得します。 Paypalのキャンセルボタンを押して支払いをキャンセルした場合、私はすでに処理しています。ただし、支払いの設定中にエラーが発生した場合や、ユーザーがウィンドウを閉じる、支払いがタイムアウトした場合でも、行は引き続きデータベースに格納されます。私がしたいのは、datetime-fieldに有効な値が与えられていない場合、おそらく20分後に削除されます。

EDIT:行が挿入されたとき(支払いが呼び出されたとき)のフィールドもあります。

これを行うにはどうすればよいですか?

答えて

2

行を挿入すると、別の日付フィールドrow_created_atを追加し、NOW()に設定します。

また、datetime-fieldnullであり、row_created_atが20分より古い行をすべて削除するcronジョブを設定します。

+0

ああ、私はそのようなフィールドを持っています。実際に、私はこれらのcronの仕事について聞いたことがありますが、それらについてはほとんど(または何も)知りません。私はこれをPHPで書いていますか?この小切手の間隔はどこで設定しますか? –

+0

@Victorが指摘するように、未使用の行からの性能低下はほとんど存在しません。毎週手動でこの操作を手動で実行することができます:-) –

+0

そして、はい、crontabを使用すると、必要なすべてのプログラム、さらにはPHPスクリプトを実行できます。ここには[Ubuntuのドキュメント](https://help.ubuntu.com/community/CronHowto)があります。 –

2

まず、作成時間を予約に追加する必要があります。または、3日前に作成した予約と3ミリ秒前に作成した予約を区別する方法がありません。

第2に、データベース内に数百もの未使用行があってもパフォーマンスが低下することはないので、「データベースをクリーンにする」プロセスは、「できるだけ早く未使用行を削除する」 。速い関係なく、どのように多くの

DELETE FROM booking WHERE datetime = 0 
         AND create_time < NOW() - INTERVAL 24 HOUR 

は、このクエリの雷を行いますdatetimeにインデックスを追加:

これは、あなたがに類似したクエリを実行します(たとえば、毎晩のように)固定された時点でプロセスを実行できることを意味します有効な予約はそのテーブルに終わります。

関連する問題