データベースにフィールドを保持し、何らかの時間で更新する必要があります。その後、その時間をチェックして、30分以上前かどうかを確認する必要があります。そうでない場合は、30分までの残り時間はどれくらいですか。
私はPHP+MySQLでこれを行うつもりですが、これを行う最も簡単な方法を誰かに教えてもらえますか?
ありがとう!!
テーブルの最後の更新/挿入が発生したのは何年前かを知りたいと仮定しましょう。
on update 句を使用して、タイムスタンプ フィールドを持つテーブルを設定できます。
CREATE TABLE foo (
id int auto_increment,
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
primary key(id),
key(ts)
)
次に、ts の最大値を持つレコードをクエリします
SELECT
TIMEDIFF(Now()-Interval 30 Minute, ts)
FROM
foo
ORDER BY
ts DESC
LIMIT
1
編集: 過去 12 時間などに挿入/変更されたすべてのレコードを取得する場合にも機能します。
SELECT
TIMEDIFF(Now()-Interval 30 Minute, ts)
FROM
foo
WHERE
ts > Now()-Interval 12 hour
ORDER BY
ts DESC
edit2: http://dev.mysql.com/doc/refman/5.1/en/show-table-status.htmlに興味があるかもしれません:
SHOW TABLE STATUS は次のフィールドを返します。
...
Update_time
データ ファイルが最後に更新された日時。一部のストレージ エンジンでは、この値は NULL です。たとえば、 InnoDB はそのテーブルスペースに複数のテーブルを格納し、データ ファイルのタイムスタンプは適用されません。MyISAM の場合、データ ファイルのタイムスタンプが使用されます。ただし、Windows では更新によってタイムスタンプが更新されないため、値は不正確です。
私がしているのは、最新の記録にタイムスタンプを入れることです。MySQL クエリで最新のレコードを取得し、mysql フェッチ配列関数を使用してその最後のレコードの時刻を取得します。これは、時刻のみで更新されるデータベースを使用する場合と同じです。
現在の時刻をレコードの時刻と比較する関数を使用して、その時刻を操作できます。そこから、前回の投稿からの時間を表示し、30 分以上経過している場合はメッセージをエコーすることができます。
$currenttime = /* PHP Time Formatting you wish to use. */
$query = mysql_query("SELECT time FROM database");
$row = mysql_fetch_array($query);
echo "Last Record Posted @" . $row['time'];
$timesince = $currenttime - $row['time'];
echo "Time Since Last Post:" . $time - $row['time'];
if($timesince >= "30"){
echo "Over 30 Minutes!";
}
ご不明な点がございましたら、お知らせください。上記のコードは、それがどのように機能するかを示しているはずですが、これは大まかな例です。
頑張ってください!!
編集:::
申し訳ありませんが、質問を読み間違えました。データベースに時間を入力する必要があります。上記のコードを使用して時間を取得し、それが 30 分を超えているかどうかを確認することができます。
タイム スタンプについては、PHP Time Manualを参照してください。MySQL 入力と上記のコードの両方に同じ時間形式を選択することをお勧めします。
次のような関数で MySql 呼び出しを挿入および更新するすべてをラップできます。
function MySqlQuery($query, $res){
$result = mysql_query($qs, $res);
if($result === false){
mysql_query("QUERY STRING TO UPDATE FIELD IN DATABASE WITH NEW TIME", $res);
}
return $result;
}
「QUERY STRING TO UPDATE FIELD IN DATABASE WITH NEW TIME」を実際の更新クエリに置き換えれば、準備完了です。