-1

次のフィールドを持つテーブルがあります。

id - int
name - int
the_date - int

the_date行が追加されたときのUNIXタイムスタンプです

現在、7 日後の日にすべての行を選択するクエリを作成しようとしています。time()から 7日以上の行を選択することについて話しているのではありませtime()time()

私はそれを行う方法を知っているので、単純な >= SELECT から 7 日以内ですが、そのtime()方法がわからないので、UNIX タイムスタンプがその特定の日 (今から 7 日後) にあるすべての行を選択します。

どんな助けでも大歓迎です。

4

3 に答える 3

0
$todayParts = getdate();    
$startToday = mktime(0, 0, 0, $todayParts['mon'], $todayParts['mday'], $todayParts['year']);
$sevebDaysFromNow = 60 * 60 * 24 * 7;
$seventhStart = $startToday + $sevebDaysFromNow;
$seventhEnd = $seventhStart + 60 * 60 * 24;
$sql = "SELECT * FROM <table> WHERE the_date BETWEEN $seventhStart AND $seventEnd";

これは、あなたが今いる日の始まりから 7 日を計算します。お役に立てれば

于 2012-05-11T00:39:40.833 に答える
0
SELECT * FROM `dbname1`.`test`
  WHERE 
    date(FROM_UNIXTIME(`the_date`)) = ADDDATE(DATE(NOW()), INTERVAL 7 DAY);
于 2012-05-11T00:43:02.597 に答える
0

ここのこだわりポイント、

  • curdate() を使用して、DATETIME ではなく現在の DATE を取得します。
  • 7 日を追加して UNIX 時間に変換すると、その日の開始秒が得られます
  • 次の日も同じことをします
  • 私は where 節を >= またはターゲット日と等しくなるように構造化しますが、< 翌日の開始日です。これにより、ターゲット日を完全にカバーする秒の範囲が得られます。
  • 列自体で関数を使用しません。これは重要です。これを行うと、mysql は列に存在するインデックスを使用してクエリを完了することができなくなるためです。

where the_date >= unix_timestamp(curdate() + interval 7 day)
  and the_date < unix_timestamp(curdate() + interval 8 day)
于 2012-05-11T00:50:54.323 に答える