Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выбрать записи интервалом в 1 месяц
 
 автор: mishaMC   (05.09.2006 в 13:23)   письмо автору
 
 

Как выбрать даты удовлетворяющие определенному интервалу времени? У меня новостная лента, там есть поле date_create (datetime). Хотелось бы сделать скрипт: "Все новости за прошлый месяц".

   
 
 автор: Loki   (05.09.2006 в 14:06)   письмо автору
 
   для: 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

Мог наделать ошибок, но примерно так.

   
 
 автор: ec_stasis   (05.09.2006 в 16:18)   письмо автору
 
   для: 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.

   
 
 автор: Loki   (05.09.2006 в 16:34)   письмо автору
 
   для: ec_stasis   (05.09.2006 в 16:18)
 

Сдается мне, поручик, вы не приняли во внимание всю серьезность противника: с фланга у них разное количество дней в месяце, а в аръергарде то, что первое число не ежедневно, поэтому месяц от него отнимать бессмысленно.

   
 
 автор: mishaMC   (05.09.2006 в 16:58)   письмо автору
 
   для: 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'

   
 
 автор: Loki   (05.09.2006 в 17:37)   письмо автору
 
   для: mishaMC   (05.09.2006 в 16:58)
 

Ну я предложил тоже самое, только средствами mysql

   
 
 автор: ec_stasis   (05.09.2006 в 16:59)   письмо автору
 
   для: Loki   (05.09.2006 в 16:34)
 

не понимаю в чем проблема?

mysql> SELECT something FROM tbl_name
    -> WHERE DATE_SUB(CURDATE(),INTERVAL 1 MONTH) <= date_col; 



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

   
 
 автор: Loki   (05.09.2006 в 17:38)   письмо автору
 
   для: ec_stasis   (05.09.2006 в 16:59)
 

ваш пример выводит записи за последний месяц, а не за предыдущий.

   
 
 автор: ec_stasis   (05.09.2006 в 18:16)   письмо автору
 
   для: 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

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования