すべての日付をタイムスタンプ(int)としてデータベースに保存しています。
正確に3日前の日付を取得するにはどうすればよいですか?
私は試した
SELECT date from user WHERE DATE_ADD(DATE( FROM_UNIXTIME( `created` ) ), INTERVAL 3 DAY) = CURDATE()
それを行うための最良/最も効率的な方法ですか?
すべての日付をタイムスタンプ(int)としてデータベースに保存しています。
正確に3日前の日付を取得するにはどうすればよいですか?
私は試した
SELECT date from user WHERE DATE_ADD(DATE( FROM_UNIXTIME( `created` ) ), INTERVAL 3 DAY) = CURDATE()
それを行うための最良/最も効率的な方法ですか?
データベースは、次のように、範囲を定義するために日付の追加を2回だけ行うことを好むと思います。
SELECT date FROM user
WHERE UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL -3 DAY)) <= `created`
AND `created` < UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL -2 DAY));
どちらの場合も、SELECT の前に DESCRIBE キーワードを置いてテストすると、データベースはクエリの実行方法を応答します。
SELECT date
FROM user
WHERE created = UNIX_TIMESTAMP(CURRENT_DATE - INTERVAL 3 DAY)
注: created
where 句の列で使用される関数はありません。このクエリは、インデックスを使用できる必要があります。