Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Выбор записей за сутки с 10:00 до 10:00

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Deonis
Отправлено: 21 Июля, 2015 - 14:27:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


Помог: 14 раз(а)




Приветствую, господа! Появилась задачка, которую без проблем можно решить, если некоторые расчеты производить в php, но стало интересно организовать это всё в самом запросе.
Предположим, что смена сотрудника длится с 10-ти утра текущего до 10-ти утра следующего дня. Необходимо вытащить записи за текущую смену и естественно опираясь на текущее время (что-то дофига слов "текущий" Радость ). К примеру, если сейчас >= 10 часов, то выбрать в диапазоне от 10:00 текущего дня, до 10:00 завтрашнего. Если сейчас < 10 часов, то с 10:00 прошлого дня, до 10:00 текущего.
Повторюсь, что на php это решается достаточно просто и всего парой строк, но как по уму организовать эти условия и проверки в самом запросе? Пока дошёл до такого варианта, но что-то он мне не особо нравится:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `some_table`
  2. WHERE
  3.   `datetime_field`
  4. BETWEEN
  5.  
  6. CASE
  7. WHEN
  8.   HOUR( NOW( ) ) >= 10
  9. THEN
  10.   DATE_FORMAT(CURDATE(), '%Y-%m-%d 10:00')
  11. ELSE
  12.   DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -1 DAY), '%Y-%m-%d 10:00')
  13. END
  14.  
  15. AND
  16.  
  17. CASE
  18. WHEN
  19.   HOUR( NOW( ) ) >= 10
  20. THEN
  21.   DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 DAY), '%Y-%m-%d 10:00')
  22. ELSE
  23.   DATE_FORMAT(CURDATE(), '%Y-%m-%d 10:00')
  24. END

(Отредактировано автором: 21 Июля, 2015 - 14:29:09)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB