1

Unix タイムスタンプ ( int(11) ) として保存されている日付情報を持つデータベースを使用しています。たとえば、過去 X 日間、たとえば過去 90 日間のエントリのみを返します。

私が思いついたのは次のとおりです。

SELECT * FROM mytable WHERE category=1 AND 
FROM_UNIXTIME( time ) > DATE_SUB(now(), INTERVAL 91 DAY)

'time' はデータベースの int(11) です。これはうまく機能しているように見えますが、他の人がこれについてどう思うか疑問に思っています.

4

4 に答える 4

2
SELECT * FROM mytable WHERE category=1 AND 
time > (UNIX_TIMESTAMP() - ((60*60*24)*90))

または単に

SELECT * FROM mytable WHERE カテゴリ=1 AND 時間 > (UNIX_TIMESTAMP() - (86400*90))

これは数値を比較するだけです(この場合は秒)

于 2009-08-23T17:49:12.440 に答える
0

声に出して考えてみてください...逆にすると、DBの作業が少なくなりませんか?

time > UNIX_TIMESTAMP( DATE_SUB(NOW(), INTERVAL 91 DAY) )
于 2009-08-23T17:49:24.997 に答える
0

このクエリは、MySQL がすべての行の日付を変換する必要があり、インデックスを使用できないため、頭痛の種になります。Unix タイムスタンプは数値であるため、タイムスタンプを別の日付形式に変換する代わりに、ルックアップ日付を UNIX タイムスタンプに変換します。

于 2009-08-23T17:52:03.510 に答える
0

タイムスタンプを int として保存する理由は何ですか? mysql が持つ多くの日時関数を使用できるため、mysql DATETIMEデータ型を使用します。

このフィールドのデータ型を制御できない場合は、クエリを実行する前に日付を UNIX タイムスタンプ int に変換し、その方法で比較します。

于 2009-08-23T17:55:46.543 に答える