|
|
|
| Как выбрать даты удовлетворяющие определенному интервалу времени? У меня новостная лента, там есть поле date_create (datetime). Хотелось бы сделать скрипт: "Все новости за прошлый месяц". | |
|
|
|
|
|
|
|
для: mishaMC
(05.09.2006 в 13:23)
| |
SELECT * FROM table WHERE date_create BETWEEN DATE_FORMAT(NOW(), '%Y-%m-01 00:00:00') AND DATE_FORMAT(NOW(), '%Y-%m-01 00:00:00') - INTERVAL 1 MONTH
|
Мог наделать ошибок, но примерно так. | |
|
|
|
|
|
|
|
для: mishaMC
(05.09.2006 в 13:23)
| | Here is an example that uses date functions. The following query selects all rows with a date_col value from within the last 30 days:
mysql> SELECT something FROM tbl_name
-> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;
|
Вот, взято прямо из мануала по MySQL. | |
|
|
|
|
|
|
|
для: ec_stasis
(05.09.2006 в 16:18)
| | Сдается мне, поручик, вы не приняли во внимание всю серьезность противника: с фланга у них разное количество дней в месяце, а в аръергарде то, что первое число не ежедневно, поэтому месяц от него отнимать бессмысленно. | |
|
|
|
|
|
|
|
для: Loki
(05.09.2006 в 16:34)
| | Я решил проблему по-другому. Просто выполняю запрос, подставляя даты в BETWEEN в виде аргументов. Аргументы генерю при помощи php скрипта. Может это и не самое изящное решение, но оно работает.
Запрос выглядитп примерно так (уже с подставленными аргументами):
SELECT * FROM table WHERE date_create BETWEEN '2006-08-01 00:00:00' AND '2006-08-31 00:00:00'
|
| |
|
|
|
|
|
|
|
для: mishaMC
(05.09.2006 в 16:58)
| | Ну я предложил тоже самое, только средствами mysql | |
|
|
|
|
|
|
|
для: Loki
(05.09.2006 в 16:34)
| | не понимаю в чем проблема?
mysql> SELECT something FROM tbl_name
-> WHERE DATE_SUB(CURDATE(),INTERVAL 1 MONTH) <= date_col;
|
>>> первое число не ежедневно, поэтому месяц от него отнимать бессмысленно.
как вот это понять? | |
|
|
|
|
|
|
|
для: ec_stasis
(05.09.2006 в 16:59)
| | ваш пример выводит записи за последний месяц, а не за предыдущий. | |
|
|
|
|
|
|
|
для: Loki
(05.09.2006 в 17:38)
| | Теперь понял, воноват! :)
Тогда вот так можно
SELECT date_col
FROM table
WHERE date_col >= DATE_SUB(CURDATE() - INTERVAL DATE_FORMAT(CURDATE(), '%d') - 1 DAY, INTERVAL 1 MONTH)
AND date_col <= CURDATE() - INTERVAL DATE_FORMAT(CURDATE(), '%d') - 1 DAY
|
| |
|
|
|