SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 18.03.2008 22:35:30

mark1983
Участник
Зарегистрирован: 08.01.2008
Сообщений: 7

Срочно требуется помощь!

Здравствуйте,

Есть таблица с заказами, которые постоянно поступают. В принципе для сути дела не важно, откуда они. Их надо отобразить посуточно, причём не с полуночи до полуночи, а с 3 часов ночи предыдущего дня до 3 часов ночи следующего дня. Т.е. к примеру:

Дата 1 марта: видно заказы, поступившие в период с 1 марта 3 часов ночи до 2 марта 3 часов ночи.
Дата 2 марта: видно заказы, поступившие в период с 2 марта 3 часов ночи до 3 марта 3 часов ночи.

Причём, если наступило 2 марта, но время, к примеру, 1.40, то должны быть видны заказы поступившие в период с 1 марта 3 часов ночи до 2 марта 3 часов ночи. Т.е. сутки как бы "сдвигаются" на 3 часа вперёд. Все указанные даты должны быть локальными (те, которые возвращают NOW(), CURRENT_DATE(), CURRENT_TIME()).

Какие здесь могут быть варианты запросов к базе? Дата поступления заказа хранится в поле с типом DATETIME.

Всем спасибо за помощь!

Сразу говорю: следующий запрос:
select * from orders where
      date_open > DATE_ADD(current_date(), INTERVAL -21 HOUR)
and date_open < DATE_ADD(current_date(), INTERVAL 3 HOUR);

НЕ РАБОТАЕТ! sad sad sad

Неактивен

 

#2 18.03.2008 23:03:13

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Срочно требуется помощь!

Вот такие выражения работают

mysql> select current_date() + INTERVAL 3 HOUR;
+----------------------------------+
| current_date() + INTERVAL 3 HOUR |
+----------------------------------+
| 2008-03-18 03:00:00              |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select current_date() - INTERVAL 21 HOUR;
+-----------------------------------+
| current_date() - INTERVAL 21 HOUR |
+-----------------------------------+
| 2008-03-17 03:00:00               |
+-----------------------------------+
1 row in set (0.00 sec)

Неактивен

 

#3 18.03.2008 23:14:22

mark1983
Участник
Зарегистрирован: 08.01.2008
Сообщений: 7

Re: Срочно требуется помощь!

Да я-то понимаю!
А запрос тогда почему не работает??? sad sad

Просто мне нужно чтобы эти 2 выражения одновременно сработали

Отредактированно mark1983 (18.03.2008 23:31:57)

Неактивен

 

#4 18.03.2008 23:40:49

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Срочно требуется помощь!

Должен работать Ваш запрос. В каком формате open_date? Какой тип? Если date, то open_date не содержит времени и Вам следует добавить к нему 0 часов, чтобы преобразовать в дату-время

select * from orders where
      date_open + INTERVAL 0 HOUR > DATE_ADD(current_date(), INTERVAL -21 HOUR)
and date_open + INTERVAL 0 HOUR < DATE_ADD(current_date(), INTERVAL 3 HOUR);

Неактивен

 

#5 18.03.2008 23:53:49

mark1983
Участник
Зарегистрирован: 08.01.2008
Сообщений: 7

Re: Срочно требуется помощь!

Дата в формате 0000-00-00 00:00:00
Есть там время и запросы по отдельности работают sad((

Неактивен

 

#6 19.03.2008 00:01:04

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Срочно требуется помощь!

Работают по отдельности и дают пересекающиеся выборки? А что значит запрос "не работает"?

Неактивен

 

#7 19.03.2008 00:17:48

mark1983
Участник
Зарегистрирован: 08.01.2008
Сообщений: 7

Re: Срочно требуется помощь!

Блин!... кажется работает!!! После долгих мучений!...
Пока не закрывайте тему. Подожду до завтрашнего утра. Если будет так как я думаю, тогда замечательно! smile smile

Неактивен

 

#8 19.03.2008 08:41:34

mark1983
Участник
Зарегистрирован: 08.01.2008
Сообщений: 7

Re: Срочно требуется помощь!

Не-а, не работает.
В таблице заказов есть заказ, датированный 19.3.2008 10:00. По идее он должен отображаться, а его почему-то нет...

Отредактированно mark1983 (19.03.2008 08:41:49)

Неактивен

 

#9 19.03.2008 09:17:31

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Срочно требуется помощь!

mark1983 написал:

Не-а, не работает.
В таблице заказов есть заказ, датированный 19.3.2008 10:00. По идее он должен отображаться, а его почему-то нет...

Он и не должен отображаться. Ваше условие "date_open > DATE_ADD(current_date(), INTERVAL -21 HOUR) and date_open < DATE_ADD(current_date(), INTERVAL 3 HOUR);" выводит данные с 3ех утра вчерашенего дня (т.е. 18.03) по 3 утра сегодняшнего дня (т.е. 19.03).

А 19.3.2008 10:00 это больше чем DATE_ADD(current_date(), INTERVAL 3 HOUR) = 19.3.2008 03:00.

Неактивен

 

#10 19.03.2008 19:08:02

mark1983
Участник
Зарегистрирован: 08.01.2008
Сообщений: 7

Re: Срочно требуется помощь!

Мне нужно чтобы заказы менялись КАЖДЫЙ день в 3 часа ночи.
Т.е. 19 марта в 3.01 УЖЕ должен отображаться заказ сделанный на 19 марта 10 утра.

Т.е. 19 марта в 3.01 уже должны отображаться заказы, сделанные с 19.03 03:00 по 20.03 03:00.

Отредактированно mark1983 (19.03.2008 19:08:47)

Неактивен

 

#11 19.03.2008 21:49:51

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Срочно требуется помощь!

Тогда условие должно быть другое

select * from orders where
(col_stamp - interval 3 hour) > current_date()
and
(col_stamp - interval 3 hour) < date_add(current_date(), interval 24 hour);

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson