日付時刻と PHP を使用して、1、7、30 日前の MySQL データベースのレコードを選択する 質問する

日付時刻と PHP を使用して、1、7、30 日前の MySQL データベースのレコードを選択する 質問する

次のクエリを使用して、現在の時刻より正確に X 日古い結果をターゲットにします。

SELECT  *,
        DATE_FORMAT(datetime, '%m/%d/%Y') 
   FROM table 
  WHERE datetime BETWEEN SYSDATE() - INTERVAL 30 DAY 
                     AND SYSDATE() 
ORDER BY ID DESC

問題は、ちょうど30日前の記録が存在しない場合、無関係なデータだけでなく、現在の日付のデータも返されることです。

これを行うより良い方法はありますか?

ベストアンサー1

BETWEEN2 つの引数の間にあるすべての値 (両端の値を含む) が含まれます。つまり、BETWEEN 1 AND 4値 1、2、3、4 が含まれます。1 と 4 だけでなく、2 と 3 だけではありません。

30 日前の 1 日の日付だけが必要な場合は、次を試してください。

SELECT  *,
        DATE_FORMAT(datetime, '%m/%d/%Y') 
   FROM table 
  WHERE DATE(datetime) = CURDATE() - INTERVAL 30 DAY 
ORDER BY ID DESC

時刻要素のない日付を返すため、CURDATE()の代わりにを使用します。SYSDATE()CURDATE()

おすすめ記事