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

Форум MySQL

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

 

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

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

тема: Как можно хранить дату если день не задан
 
 автор: Adj   (29.01.2009 в 12:49)   письмо автору
 
 

День добрый!
Есть небольшой вопрос гуру php.
Делаю блог "Знаменательные даты", в которм будут храниться полные даты (т.е. заданы год, месяц и день) и даты, у которых день не известен.
Как можно организовать такое хранение дат, чтобы к дате без дня можно было прибавит года или месяца?
Попробовал формат YYYY-MM-00, данные вставляются в поле типа дата, но при обработке MySQL возвращает NULL.

  Ответить  
 
 автор: cheops   (29.01.2009 в 14:48)   письмо автору
 
   для: Adj   (29.01.2009 в 12:49)
 

Хм... а почему бы не воспользоваться типом DATE, а при выборке просто не учитывать день? Кроме того, что имеется в виду под "обработкой"?

  Ответить  
 
 автор: Adj   (29.01.2009 в 17:53)   письмо автору
 
   для: cheops   (29.01.2009 в 14:48)
 

Я имел ввиду операции

  Ответить  
 
 автор: Trianon   (29.01.2009 в 17:57)   письмо автору
 
   для: Adj   (29.01.2009 в 17:53)
 

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

  Ответить  
 
 автор: Trianon   (29.01.2009 в 14:55)   письмо автору
 
   для: Adj   (29.01.2009 в 12:49)
 

Чем не устраивает YYYY-MM-01 ?

  Ответить  
 
 автор: Temnovit   (29.01.2009 в 18:04)   письмо автору
 
   для: Trianon   (29.01.2009 в 14:55)
 

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

  Ответить  
 
 автор: Adj   (29.01.2009 в 18:06)   письмо автору
 
   для: Trianon   (29.01.2009 в 14:55)
 

Допустим есть дата, например, 01.1969 г. (конкретный день неизвестен) - какой-то значимый день в году, но он не должен выводиться каждый год, а лишь тогда, когда будет "юбелей" (5, 10, 15, 25, ,,,, лет). Чтобы ее вывести, надо получается вычесть из текущей даты дату 01.1969. Но MySQL не работает с датами у которых день например 0.
Если просто писать 01, то это же получаеться противоречить истории. Уж лучше ничего не писать, чем писать неправду.
Конечно можно это решить написав функции на PHP, но хочеться сначала попробовать это сделать стандартными средствами MySQL.

  Ответить  
 
 автор: Trianon   (29.01.2009 в 18:15)   письмо автору
 
   для: Adj   (29.01.2009 в 18:06)
 

>Допустим есть дата, например, 01.1969 г (конкретный день неизвестен)

Это не дата. Дата задает точку на временной оси с точностью до суток.

>Если просто писать 01, то это же получаеться противоречить истории.
>Уж лучше ничего не писать, чем писать неправду.

Нагружать на поле даты несвойственную этому типу функцию - еще хуже.
Вы можете хранить две даты (начало и конец интервала) .
Можете хранить дату и логический признак неопределенности дня месяца (в отдельном поле, само собой).
Писать неправду Вам так или иначе придется, поскольку точной информацией Вы не обладаете.

>Конечно можно это решить написав функции на PHP,
>но хочеться сначала попробовать это сделать стандартными средствами MySQL.

сделать что?

  Ответить  
 
 автор: Adj   (29.01.2009 в 18:47)   письмо автору
 
   для: Trianon   (29.01.2009 в 18:15)
 

>Можете хранить дату и логический признак неопределенности дня месяца (в отдельном поле, само собой).

Тоже думал про такой способ. Думаю он пока самый оптимальный для такой задачи.

>сделать что?

Вычесть знаменательную дату из текущую даты, чтобы узнать является ли она юбилейной.

  Ответить  
 
 автор: Trianon   (29.01.2009 в 19:08)   письмо автору
 
   для: Adj   (29.01.2009 в 18:47)
 

>Вычесть знаменательную дату из текущую даты, чтобы узнать является ли она юбилейной.

Окей. Знаменательная дата 1969-01-XX . Текущая - сегодняшняя.
Как Вы хотите вычитать даты?

  Ответить  
 
 автор: Adj   (29.01.2009 в 20:13)   письмо автору
 
   для: Trianon   (29.01.2009 в 19:08)
 

Для чего мне нужно получить разницу дат? А для того чтобы узнать "юбилейная" она или нет и ВСЕ. Для этого достаточно получить разницу в месяцах м/у этими датами и сравнить с числом 60. Есть функция в MySQL: 'PERIOD_DIFF(YYYYMM, YYYYMM)' ( недавно обнаружил :) ), которая как раз и возвращает такую разницу и в ней можно не указывать день.
Я думаю задача решилась.

  Ответить  
 
 автор: Temnovit   (29.01.2009 в 18:06)   письмо автору
 
   для: Adj   (29.01.2009 в 12:49)
 

Я бы завел три поля, для года, месяца и дня. Не нужный атрибут можно оставить как NULL и потом не выводить его.

А выборка была бы примерно такой:
SELECT *
FROM events
ORDER BY year, month, day

  Ответить  
 
 автор: Adj   (29.01.2009 в 18:12)   письмо автору
 
   для: Temnovit   (29.01.2009 в 18:06)
 

Можно и так конечно.
Спасибо за ответы.
Буду эксперементировать, рассмотрю и Ваш вариант.

  Ответить  
 
 автор: Trianon   (29.01.2009 в 18:17)   письмо автору
 
   для: Temnovit   (29.01.2009 в 18:06)
 

Выполнять обычные арифметические операции над таким набором полей (как над моментом времени) будет весьма затруднительно.

  Ответить  
Rambler's Top100
вверх

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