Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что оптимальнее (обработка дат). SQL или PHP 
:(
    Опции темы
Kesh
Дата 6.2.2005, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 5
Всего: 54



Есть табличка, в которой есть два поля `datestart` и `dateend` типа timestamp(14). В которых хранятся даты начала и конца определенного события. После этого выполняется запрос на события, которые должны произойти в течение недели. Делается это так
SQL
SELECT s.`id`, CONCAT(DATE_FORMAT(s.`datestart`,'%H:%i'),' − ',DATE_FORMAT(s.`dateend`,'%H:%i')) as `interval`, s.`subject`, s.`place`, s.`author`, s.`datestart`, s.`dateend`, DATE_FORMAT(s.`datestart`,'%d.%m.%Y') as `shedule_date`, TO_DAYS(s.`datestart`)-TO_DAYS(current_timestamp) as `datediff`, NOW() as `currtime`
FROM shedule s
WHERE ((TO_DAYS(s.`datestart`)-TO_DAYS(current_timestamp)) < 7) AND ((TO_DAYS(current_timestamp)-TO_DAYS(s.`dateend`)) <= 0)
ORDER BY s.`datestart` ASC

Обратите внимание на это выражение
SQL
CONCAT(DATE_FORMAT(s.`datestart`,'%H:%i'),'&nbsp;&minus;&nbsp;',DATE_FORMAT(s.`dateend`,'%H:%i')) as `interval`

оно преобразует дату из двух полей в выражение типа 11:40 - 12:20
Вопрос вот в чем, не оптимальнее ли будет это делать (преобразование дат) через PHP и как это сделать.

Это сообщение отредактировал(а) Kesh - 6.2.2005, 21:17


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 6.2.2005, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Kesh
А почему нельзя хранить дату ввиде: 1107716599, работать элементарно и не надо диких запросов?
PM ICQ   Вверх
Kesh
Дата 6.2.2005, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 5
Всего: 54



Mal Hack а в timestamp она так и хранится только наоборот YYYYMMDDHHmmSS
Добавлено @ 22:54
http://www.mysql.ru/docs/man/DATETIME.html


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 6.2.2005, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Нет, ты не понял...
Я тебе говорю не про YYYYMMDDHHmmSS, а про UNIX TIME, где 1107716599 - число секунд с начала 1970 года...
PM ICQ   Вверх
Kesh
Дата 7.2.2005, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 5
Всего: 54



Mal Hack
Цитата(Mal @ 6.2.2005, 22:03)
А почему нельзя хранить дату ввиде: 1107716599, работать элементарно и не надо диких запросов?

Ладно, понятно, извини недоглядел...
Ну и чем лучше выбирать UNIX_TIME и потом отрабатывать его в PHP, чем получать готовые данные из запроса?..



--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 7.2.2005, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



1. UNIX_TIME - число, а следовательно ве операции сравнения в базе будут намного быстрее, чем использования FROM_UNIXTIME и т.п.
2. Выбрать за период очень просто, опять `time` < `time` - 7 * 60* 60 к примеру.
3. запросы короче и более читаемы.
4. Когда ты уже вынешть нужную инфу тебе очень легко сделать нормальный вывод, применив к ячейке date(); к примеру...
Т.е. ты не завязан на конкретном формате даты, который ты делаешь в запросе..

Но самое главное - 1 и 2.
PM ICQ   Вверх
Kesh
Дата 7.2.2005, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 5
Всего: 54



Mal Hack
Цитата(Mal @ 7.2.2005, 00:54)
чем использования FROM_UNIXTIME

Я не использую FROM_UNIXTIME.

Цитата(Mal @ 7.2.2005, 00:54)
`time` < `time` - 7 * 60* 60

7*60*60 тоже вычисляется... И даже если записать константой, то уж от операции вычитания никуда недеться...

Цитата(Mal @ 7.2.2005, 00:54)
запросы короче и более читаемы.

Запрос зашит в php код и я не думаю, что преобразования внутри php будут удобнее, чем в запросе с точки зрения читаемости самих исходников скриптов.


Цитата(Mal @ 7.2.2005, 00:54)
Когда ты уже вынешть нужную инфу тебе очень легко сделать нормальный вывод, применив к ячейке date(); к примеру...

Так а сейчас мне этого вообще делать не надо - я просто вывожу уже имеющиеся данные...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Kesh
Дата 7.2.2005, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 5
Всего: 54



Цитата
Storage Requirements: DATETIME 8 bytes
собсно, DATETIME это тип BIGINT ;)
и хранит в себе точноe значение даты/времени,
а не число секунд, как TIMESTAMP...



--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 7.2.2005, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Цитата(Kesh @ 7.2.2005, 01:19)
Я не использую FROM_UNIXTIME.

Я имел ввиду не конкретно эжту функцию, а вообше...
CONCAT и DATE_FORMAT в твоем запросе.

PM ICQ   Вверх
Kesh
Дата 7.2.2005, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 5
Всего: 54



Mal Hack А ты думаешь, что такая обработка в php будет гораздо быстрее?..


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Song
Дата 7.2.2005, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


Профиль
Группа: Участник
Сообщений: 1095
Регистрация: 2.6.2002

Репутация: -1
Всего: 4



Kesh
конечно.
+ ещё unix time использовать. Даже не сравнимо.
Ты сделай EXPLAIN запроса, посмотри, утверждать не берусь, но по-моему при использовании таких функций мускул не использует индекс.


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1014 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.