| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > php + mysql (дата) |
| Автор: Dmitry_177 12.12.2007, 20:55 | ||||
вывод таблицы:
так вот при выводе таблицы, мне нужно знать, есть ли в одном поле таблицы дата или нет.. вот так правильно будет, если поле с датой "date"?
или как-то еще надо определять на нулевую дату значение $select_arr['date']? |
| Автор: HotHead 12.12.2007, 21:43 |
| Dmitry_177, посмотрите в структуре таблицы значение по умолчанию для этого поля. На него и надо проверять. Традиционно это строка '0000-00-00'. |
| Автор: Dmitry_177 12.12.2007, 22:04 |
| Я совсем забыл про empty |
| Автор: Feldmarschall 12.12.2007, 22:09 |
| Dmitry_177, а при чем здесь empty? во-первых, эта функция проверяет существование переменной, а переменная однозначно есть. следовательно, половина функционала не используется. во-вторых, как тебе правильно указал HotHead, при наличии дефолтного значения в таблице будет '0000-00-00', а это не пустая строка. еще половина функционала долой. интересная получается мысль - пользоваться функцией, которая на 100% здесь не подходит. |
| Автор: BuShaRt 13.12.2007, 14:53 | ||||
| Дату лучше всего хранить в int формате, а само содержимое должно являться UnixTime'ом. Причем установить по умолчанию поле равное нулю. В таком случае
если структуру нельзя уже менять, тогда
|
| Автор: Feldmarschall 13.12.2007, 15:02 |
| BuShaRt, вроде бы, HotHead выше показывал, почему empty не подходит для поля date да и слово "лучше" стоит говорить с осторожностью. Всё-таки, скажем, дату рождения пока ещё не все системы могут хранить в поле типа int |
| Автор: Astraller 13.12.2007, 15:30 |
| Feldmarschall, учить матчасть! В особенности понятие timestamp. |
| Автор: HotHead 13.12.2007, 15:59 |
| Ну тут много тонкостей. Я сам раньше хранил данные в основном в timestamp. Потом перешёл на date, т.к. в MySQL есть куча удобных встроенных функций для работы с датой. Dmitry_177 не говорил в чём он её хранит, так что я предположил что именно в date. |
| Автор: Dmitry_177 13.12.2007, 22:42 | ||||
да, я в date храню.. кстати говорят что timestamp быстрей обрабатывается чем date.. интересно чем.. может знает кто? и еще такой вопрос про дату: как можно сравнить $select_arr['date'], если она там есть с текущей датой? вот так?
|
| Автор: Dmitry_177 13.12.2007, 23:27 | ||
Да, мне нужно именно в скрипте.. Вот так работает =)))
И кстати empty корректно работает! если даты нету... строка ПУСТАЯ! если даты нет.. |
| Автор: Feldmarschall 13.12.2007, 23:30 |
| И ты так перебираешь все строки, коотрые лежат в базе - правильно? |
| Автор: Dmitry_177 13.12.2007, 23:37 | ||||
нет, проверяю только дату.. а вывожу почти все строки из таблицы..
может это в последней версии PHP так сделали? у меня на компе все новенькое стоит..=))) Если в предыдущих версиях не так, то придется переделывать.. на хосте может одна из более старых версий PHP стоять.. |
| Автор: Feldmarschall 13.12.2007, 23:41 |
| А что делаешь, если дата больше, и что - если нет? А если пустая - что делаешь? Мне кажется, большую часть этих проверок можно убрать в запрос. по поводу empty - дело не в php. а в том, что в базе для этого поля у тебя нет значения по умолчанию. следовательно, туда пишется null. от этого будут проблемы в запросах. |
| Автор: Dmitry_177 13.12.2007, 23:51 | ||||
вывожу ВСЕ строки, делаю один запрос в БД и в цикле каждую строку вывожу.. Если даты нету или если меньше текущей, то добавляю определенную надпись в строке при выводе.. Если есть и она больше текущей то просто дату вывожу.. Я уже думал что-то с запросами придумать, но мне кажется как я делаю всеже для моей задачи лучший выриант..
при создании таблицы в БД я специально этому полю прописал DEFAULT NULL. А проблем в запросах из-за этого я пока что-то не наблюдал.. |
| Автор: HotHead 14.12.2007, 13:22 | ||
Ну если вы себе поставили NULL по умолчанию, то всё замечательно. Юзайте empty или is_null. Главное не забывать, что NULL это не пустая строка, не 0 и т.п. с точки зрения MySQL. Соответственно и проверять его в запросе надо будет через IS NULL. В остальном проблем возникнуть не должно. |
| Автор: Feldmarschall 14.12.2007, 13:28 |
| HotHead, вот именно - с точки зрения Mysql. поэтому рекомендация про is_null в пхп - не совсем правильная, мягко говоря ;-) |
| Автор: HotHead 14.12.2007, 14:00 |
| Feldmarschall, а вы попробуйте применить на результат запроса, вернувшего NULL, функцию var_dump. Видимо вас ожидает большой сюрприз. |
| Автор: Feldmarschall 14.12.2007, 14:14 |
| Хм. Твоя правда. Я был уверен, что приходит пустая строка. Был неправ. |
| Автор: SelenIT 15.12.2007, 12:01 | ||
Во избежание дальнейших недомолвок и вызванных ими непоняток (если, конечно, я сам понял ;) - тут подразумевалось злополучное непонимание отрицательных таймштампов виндами. Отчего гарантированная нижняя граница диапазона дат - лишь 1970-й год, что, разумеется, для дат рождения взрослых юзеров не подходит. К тому же, системы с таймштампом в виде четырехбайтного целого ожидает еще одна хоть и нескорая, но малоприятная перспектива - проблема 2038 года... |