2009-07-08 8 views
2

私はデータベースにフィールドを残し、何らかの形でそれを更新する必要があります。その後、30分以上経過したかどうかを確認する必要があります。 ?MySQL:何分前にDBが更新されましたか?

私はこれをPHP + MySqlでやっていますが、これを行う最も簡単な方法を教えていただけますか?

ありがとうございます!

+0

データベースが更新されるたびに日付フィールドを更新する必要がありますか?挿入/更新/削除はどのテーブルでも可能ですか? –

+0

"データベースにフィールドを保存する":個々のレコードが更新されたときに "テーブル" - >チェックを意味しますか?それとも、「データベース内の何かが変更された最後の時間」という意味ですか? – VolkerK

+0

私はデータベース全体ではなくテーブルを意味します。 –

答えて

0

テーブルの最後の更新/挿入がどれぐらい前に発生したかを知りたいとします。
あなたは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ではタイムスタンプは更新によって更新されないため、値は不正確です。

+0

タイムスタンプを取得したらすぐに、何分前にそれを知ることができますか?ありがとう! –

+0

timediff()の結果の形式は 'hh:mm:ss.fractions'です。最初のクエリTIMEDIFF(Now() - Interval 30 Minute、ts)の場合、最後の挿入/更新が30分未満の場合、結果にマイナス記号が付きます。したがって、-05:00:00は、「最後の更新は25分前、30分の時間が経過するまでは5分」を意味します。 – VolkerK

0

私はあなたが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; 
} 

実際の更新クエリ、あなたと「NEW TIME WITHデータベースのフィールドを更新するために、クエリ文字列」に置き換え行くのが良いはずです。

+0

あまりにも侵入しています。よりクリーンなアプローチが必要です。 –

0

最新のレコードにタイムスタンプを入れてください。最新のレコードをMySQL Queryで取得し、mysql fetch array関数を使用してその最後のレコードの時刻を取得します。これは、時間だけで更新されるデータベースの使用についても同じです。

現在の時刻とレコードの時刻を比較する関数を使用すると、その時刻を操作できます。そこから最後の投稿からの時間を表示することができ、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!"; 
} 

質問がある場合はお知らせください。上記のコードは、どのように動作するかを知っておくべきですが、これは大まかな例です。

最高の幸運!

EDIT :::

申し訳ありませんが、私はあなたがまだデータベースに時間を入力する必要があり、質問を読み違えます。上記のコードを使用して時間を引き出し、それが30分以上かどうかを確認することができます。

タイムスタンプについてはPHP Time Manualをご覧ください。上記のMySQL入力とコードの両方に同じ時刻形式を選択したいと思うでしょう。

+0

あなたは時間がどのように生成されたかについて言及する必要があります。それはタイムスタンプだと思います。 –

+0

PHPのタイムスタンプ、それであなたが使用したいPHPの時間フォーマット。 –

関連する問題