2013-06-19 2 views
2

У меня есть запрос, который выбирает все строки данных из таблицы в моей базе данных. Я использую PHP и MySQL. Вместо того, чтобы хватать все строки в моей таблице, я хотел бы только захватить строки, которые находятся между двумя и двумя неделями. Как я могу это сделать? Я знаю, что мне нужно добавить предложения WHEREВЫБРАТЬ все строки, которые являются 2 НЕДЕЛЯМИ old FROM NOW

Мой код До сих пор:

$notifications_query= "SELECT * FROM notifications ORDER BY recieved DESC"; 

Столбец, содержащий дату, которая будет использоваться назван «рассматривается», и это в формате «даты и времени».

Спасибо!

ответ

0

Попробуйте

$notifications_query= "SELECT * FROM notifications WHERE viewed BETWEEN START_DATE AND END_DATE "; 

получил определение должно быть дата для того, чтобы запрос на работу.

0

Я думаю, что это следует сделать трюк:

$twoweeksago = time()- (3600*24*14); 
$notifications_query= "SELECT * FROM notifications WHERE viewed > {$twoweeksago} ORDER BY recieved DESC"; 
2

Попробуйте

$notifications_query= "SELECT * FROM notifications WHERE yourdatecolumn BETWEEN DATE_SUB(NOW(), INTERVAL 2 WEEK) AND NOW() ORDER BY recieved DESC"; 
+0

Вы уверены, что две даты не должны идти наоборот? Я думаю, что МЕЖДУ МЕНЯМ сначала ожидает меньший аргумент, хотя я признаю, что внезапно сомневаюсь в себе. –

+0

@James вы, вероятно, правы, из документации 'Это эквивалентно выражению (min <= expr AND expr <= max)' – Fabio

1
WHERE viewed BETWEEN (NOW() - INTERVAL 14 DAY) AND now() 
+0

Я не думаю, что MySQL поддерживает это. –

0

У вас было множество ответов, потому что есть целая куча способов сделать это - и некоторые тонкости.

Самое простое, если полученное значение НИКОГДА в будущем, чтобы сделать что-то вроде ...

WHERE received > DATE_SUB(CURDATE(), INTERVAL 14 DAY) 

или

WHERE DATEDIFF(CURDATE(), received) < 14 

Если полученное значение может быть в будущем, как хорошо, и вы просто хотите кусочек от 14 дней назад на сегодняшний день, это не намного сложнее:

WHERE received BETWEEN DATE_SUB(CURDATE(), INTERVAL 14 DAY) AND CURDATE() 

или Aga в,

WHERE DATEDIFF(CURDATE(), received) BETWEEN 0 AND 14 

Одна вещь, вы должны думать о том, в дополнение к этому: получено поле даты или поля даты и времени? CURDATE() всегда полночь сегодня по сравнению с дат-временем, поэтому эти BETWEEN-запросы могут фактически опустить даты, которые падают в течение сегодняшнего дня - так как они будут падать после (например, 2013-06-19 00:00:00) значение даты и времени CURDATE. Если это проблема для вас, используйте NOW().

Смежные вопросы