Содержание раздела
Раздел 9: Модели и нотации при создании сайтов
Принципы стандартизации при разработке сайтов
Мультимедийные компоненты при создании сайта
Flash-графики при разработке сайта
ВАШ ВОПРОС: |
Здравствуйте! Нашей компании ... летом разработали сайт. Сайт совсем неплохой - нас устроило все, что было сделано по техническому заданию на создание сайта. Сейчас сложилась необходимость в небольшой корректировке административного интерфейса. В виду того, что разработчик запросил за маленькую корректировку жуткую сумму в 5000 руб. (кстати, весь сайт нам обошелся в 14 тысяч), директор поручил это сделать мне - мол "кроме тебя некому". В принципе я разобрался, как оно работает, но исправить так ничего и не смог.
На сайте имеется система регистрации заказов. Заказы идут. Но директор потребовал, чтобы отчет по заказам формировался по периоду "за текущий месяц". У заказов есть дата их поступления, которая заполняется автоматически. Соответственно, заказы хранятся в таблице формата MySQL построчно.
В структуре таблицы присутствует отдельное поле "ddzakaz" которое хранит дату и время регистрации заказа. Нужно лишь уточнить запрос по этому полю, уточнив условие "за текущий месяц". Все бы ничего, но поле почему-то ЧИСЛОВОГО типа, а не дата. В результате там видно огромной размерности целое число. Все нормальные функции MySQL для извлечения части даты типа YEAR() и MONTH() вообще не работают!
Какая же зараза этот разработчик, который вместо нормального поля дата придумал хранить дату в виде числа! Что можете посоветовать для решения проблемы?
|
Студия "Жанр" - консультации по разработке сайтов в Перми. ОТВЕТ: |
Дело в том, что в СУБД MYSQL хранение даты возможно как в формате даты, так и в числовом формате - типе данных "TIMESTAMP". Раз Вы видите очень большое целое число, значит в Вашем случае при разработке сайта использовался именно этот способ фиксирования даты и времени регистрации заказа.
Ничего страшного не случилось. Просто с таким типом данных корректно работает только специализированная функция FROM_UNIXTIME, а выполняемое ей преобразование позволяет подключать и другие обычные функции работы с датой и временем.
На сайте для показа заказов за "текущий месяц" требуется сформулировать условие:
(год_заказа = год(текущее_число)) и (месяц_заказа = месяц(текущее_число))
С точки зрения синтаксиса СУБД MySQL запись будет иметь следующий вид:
...
(year(FROM_UNIXTIME(t_zakaz.ddzakaz))=year(now()))
and
(month(FROM_UNIXTIME(t_zakaz.ddzakaz))=month(now()))
...
Надеемся, что данный пример позволит решить поставленную задачу. Комментировать вопрос стоимости разработки сайта не станем, напомнив лишь одну фразу "скупой платит дважды".
|
|