ユーザーがコンピューターを選択し、このPCを使用する時間を選択するコンピューター予約システムを作成しようとしています。その間、他の人はこの PC を予約できません。私は解決策を見つける必要があります。時間の経過後に予約済みの PC を含むすべての行を自動的に削除する方法です。アドバイスありがとう。
5 に答える
これを処理する一般的な方法は、行expires_at
にタイムスタンプを格納することです。reservation
次に、「開いている」予約を見つけるためのクエリは、WHERE 'expires_at' < NOW()
または同様のものになります。
これはテストされていない答えであり、提案にすぎないかもしれませんが、私はこれらを調べ始めたばかりなので、フィードバックにも興味があります。私はまだ可能性と欠点に取り組んでいますが、それはあなたのニーズによく合うかもしれません。
MySQLイベント、それに関する記事はここにあり、 MysqlDocsの公式構文を見てください。
記事によると:
イベントはトリガーに似ています。ただし、イベントは、データの変更に応じて実行されるのではなく、特定の期間中に何度でも実行されるようにスケジュールできます。事実上、これはデータベースのみのcronジョブです。
これを熟考して、1時間以上のものを削除する手順を想像します(それが有効期限の場合)。この手順は、その時点で期限切れになったものを取り除くために新しい挿入でトリガーされますが、トリガーによる自動削除が他の誰かに予約を追加してトリガーすることに依存しないように、15分ごとに実行されるイベントでもトリガーされます手順。
サーバーが Linux の場合、cron ジョブを使用して、予約日ごとに 1 日 1 回確認できます。これらの日付が期限切れの場合.. 変更されたフィールド予約が利用可能になります。
通常、私はこのようにします:
- 予約、ストア
date_from
、およびdate_to
データ型の両方を格納する場合DATETIME
- 空いているパソコンがあるかどうかを確認するときは、すべてのパソコンをチェックしてフィルターをかけます
WHERE '{$my_date}' >= date_to AND '{$my_date}' <= date_from
-これにより、一定時間内に予約されていないすべてのPCを取得できるはずです...
ソリューションを完了するには、クエリを呼び出して、reservation_time + (15 * 60) < unix_timestamp() を持つすべての予約を削除する CRON ジョブを実行する必要があります。
予約が設定または開始された時刻があり、UNIX/エポック タイムスタンプを使用していると想定しています。
expires_now を実行する代わりに、常に一定の間隔、つまり 15 分であることがわかっている場合は、次のようにすることができます。
DELETE FROM reservations WHERE reservation_time + (15 * 60) < unix_timestamp()
調べることができるのは、PHP から cron ジョブを管理することです ( http://www.highonphp.com/cron-job-manager ) 。
上記のスクリプトは、予約が作成されると、エントリを /etc/cron.d/ に挿入し、予想される予約の終了時間に実行するように構成できます。次に、実行されるphpファイル内で、次のことができます。
DELETE FROM reservations WHERE id = :id