2012-04-27 4 views
1

У меня есть поле date_purchased и date_ordered, которые являются полями datetime. Теперь мне нужно извлечь запись, если продукт был приобретен после заказа, и если puchase было 2 дня раньше или 7 дней после заказа:Как написать этот mysql where clause?

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

В принципе, как я могу перевести приведенный выше код MySQL, где условия (вложенные и/или)?

ответ

5

Использование DATE_SUB() and DATE_ADD() для добавления дней поля даты и времени. Два сравнения дат заключены в () в качестве одного компонента в 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 поля, а не DATE поля, вы можете сдирать временную часть с DATE() так, что день сравнение начинается в начале дня, а не какой-то 24-часового интервала с текущего времени. Это также означает использование 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) 
) 
+0

+1 за тот же ответ, как у меня! – silly

+0

Большое спасибо: Однако, если мне нужно добавить еще одну проверку там, например, «email='[email protected] И » « – Bluemagica

+0

@aoi Затем она просто становится другой« И », добавленной до или после, как' WHERE datecheck1 AND (datechecks2) И email = 'addr @ examplelcom'' –

0

Используйте оператор BETWEEN для выбора интервала.

где D между датой-2 * и * дата + 7

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) 
+0

Не пропустите индексы в полях date_purchased и date_ordered? – raina77ow