1

日時フィールドであるフィールドがdate_purchasedあります。date_orderedここで、製品が注文後に購入された場合、および購入が注文の2日前または7日後に行われた場合は、レコードを取得する必要があります。

if(date_purchased>date_ordered)
{
    if(date_purchased>(today-2) or date_puchased<(date_ordered+7))
} 

基本的に、上記のコードをmysql where condition(nested and / or)に変換するにはどうすればよいですか?

4

3 に答える 3

5

DATE_SUB()およびDATE_ADD()を使用して、日時フィールドに日数を追加します。2 つの日付比較は()、単一のコンポーネントとして に含まれていANDます。

WHERE
  date_purchased > date_ordered
  AND (
    date_purchased > DATE_SUB(NOW(), INTERVAL 2 DAY) 
    OR date_purchased  < DATE_ADD(date_ordered, INTERVAL 7 DAY)
  )

これらがDATETIMEフィールドではなくフィールドである場合は、現在の時刻から 24 時間間隔ではなく、1 日の最初に比較が開始されるように、 でDATE時刻部分を削除することができます。これは、タイムスタンプではなく今日の日付を取得する代わりにDATE()使用することも意味します。CURDATE()NOW()

WHERE
  date_purchased > date_ordered
  AND (
    DATE(date_purchased) > DATE_SUB(CURDATE(), INTERVAL 2 DAY) 
    OR DATE(date_purchased)  < DATE_ADD(DATE(date_ordered), INTERVAL 7 DAY)
  )
于 2012-04-27T13:10:09.553 に答える
0

BETWEEN 演算子を使用して間隔を選択します。

WHERE d BETWEEN *date-2 AND *date+7

于 2012-04-27T13:09:57.493 に答える
0
SELECT * FROM your_table
WHERE date_purchased > date_ordered
    AND (DATE_DIFF(date_purchased, date_ordered) > 2
    OR DATE_DIFF(date_purchased, date_ordered) < -7)
于 2012-04-27T13:11:12.313 に答える