![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
В одно из полей таблицы записываются даты в формате UTC, то есть в таком виде [02/Feb/2006:11:29:49 +0300].
Точнее говоря само поле у меня сейчас имеет тип text, я с этим ещё не определился. При выводе нужно будет сортировать записи по времени. Может лучше записывать время в базу данных в формате datetime, тогда не будет проблем с сортировкой, но как перевести его в этот формат? |
|||
|
||||
| Нурик Сакура |
|
||||
|
Почти японец... ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 17.12.2004 Где: Украина, Киев Репутация: 2 Всего: 2 |
Как я у себя делал:
в таблице есть поле Created формата DATETIME заносится время вот так:
выводится:
Это сообщение отредактировал(а) Nurik - 17.2.2006, 20:58 --------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing |
||||
|
|||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Nurik, я перечитал свой пост, там действительно не совсем ясно о чём речь идёт. Мне не текущее время нужно, я читаю записи из файла(лог Apache) и заношу их базу данных. Потом надо будет выводить записи отсортированные по времени.
В чем собственно и вопрос: как сортировать записи по времени записанному в таком формате [02/Feb/2006:11:29:49 +0300]. |
|||
|
||||
| Нурик Сакура |
|
|||
|
Почти японец... ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 17.12.2004 Где: Украина, Киев Репутация: 2 Всего: 2 |
Попробуй так:
Это сообщение отредактировал(а) Nurik - 17.2.2006, 20:57 --------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Nurik, если бы всё было так просто я бы не спрашивал.
Посмотри на формат записи, что такое с точки зрения SQL(или PHP) Feb или Jan? Просто набор символов... Нужно привести дату в человеческий формат, который можно сортировать, например datetime. |
|||
|
||||
| Нурик Сакура |
|
|||
|
Почти японец... ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 17.12.2004 Где: Украина, Киев Репутация: 2 Всего: 2 |
Хех, даже не знаю. Только что пересмотрел учебник по ПХП (прошу не смеятся, я токо учусь), там есть такой вариант, как strtotime, но такой формат, как у тебя он не поддерживает, увы...
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Нет в принципе функцию перевода в datetime можно написать самому,
но неужели других способов нет? Ведь эту функцию придется применять к каждой строке файла, а их у меня 25 тысяч, я ещё в скрипте регулярку ипользую, это сколько ж придется ждать пока этот скрипт что-то выдаст? Это сообщение отредактировал(а) sugee - 18.2.2006, 12:39 |
|||
|
||||
| Нурик Сакура |
|
|||
|
Почти японец... ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 17.12.2004 Где: Украина, Киев Репутация: 2 Всего: 2 |
Скрипт будет явно пахать долго. А насчет уже готовых скриптов обработки логов Апача - то я сомневаюсь, что кто-то это делал. Ты в Инете не пытался найти?
Добавлено @ 22:28 Я, конечно, понимаю, что готовое решение куда хуже, чем собственное. Но если ты нормально разбираешься - то ты сможешь найти то, что тебе нужно. Надеюсь, что оно подойдет. Apache logfile monitor Сайт автора: http://www.maryan.com.ua/?language=rus Описание: http://www.maryan.com.ua/?action=log Демо: http://www.maryan.com.ua/logs/log.php Качать: http://www.maryan.com.ua/maryanlog.zip Бесплатный PHP+MySQL
Добавлено @ 22:36 Или вот, но я не уверен, на ПХП ли оно: Webaliser Это сообщение отредактировал(а) Nurik - 17.2.2006, 22:28 --------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Только что провёл эксперимент:
Результат такой: 1970-01-01 03:00:25 |
|||
|
||||
| Нурик Сакура |
|
|||
|
Почти японец... ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 17.12.2004 Где: Украина, Киев Репутация: 2 Всего: 2 |
Короче, как я понял, тебе нужно преобразовать дату, получаемую из логов, и уже потом с ней работать.
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
||||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
||||
|
||||
| -=Ustas=- |
|
|||
![]() Ustix IT Group ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2222 Регистрация: 21.1.2005 Где: Краснодар Репутация: 17 Всего: 69 |
sugee, ну зачем же сразу так отчаиваться?!
Во-первых, хранить дату надо в Unix timestamp, т.к. с ней можно вытворять, что только душе угодно. Во-вторых, у тебя в этой строке (02/Feb/2006:11:29:49 +0300) есть абсолютно всё, что нужно. Бери, разбирай эту строчку, приводи её к timestamp, и записывай в БД. В чем собсна проблема? -------------------- В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм. ----- |
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 4 Всего: 73 |
Верно. А перевести дату в timestamp, думаю получится при помощи этой функции http://ru2.php.net/strtotime sugee, и не забудь на дату поставить индекс. -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
В базу записывается вот что: 0000-00-00 00:00:00 Да я как раз подумал было что моя проблема решена, точнее говоря что её и не было. Думал я так до тех пор пока не встал вопрос о сортировке по дням. |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Вместо strtotime попробовал mktime.
Вроде получился самый что ни на есть timestamp, а в базе всё равно нули Что я не так делаю?
|
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
А, ну <br>-ы я убрал, всё равно в таблице нули.
А сам timestamp выводится.
|
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
А поле datetime, теперь все правильно. Почему только Y-m-d - просто из-за парсинга строки скрипт дико тормозит! |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Рано радовался, у меня во всех строках теперь одинаковая дата стоит.
И если поле timestamp - то же самое. Научите как правильно писать в поле типа timestamp |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Вот так правильно отображается только число, год почему-то всегда меньше на единицу, вместо 2005-го 2004-й и т.д. Месяц везде декабрь, хотя есть ещё январь и февраль. |
|||
|
||||
| -=Ustas=- |
|
|||
![]() Ustix IT Group ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2222 Регистрация: 21.1.2005 Где: Краснодар Репутация: 17 Всего: 69 |
Тип поля в бд под timestamp лучше делать целочисленный.
Слушай, если ты беспокоишься о том, что скрипт слишком долго выполняется, то есть еще одно решение, более простое. Насколько я знаю, Апач пишет всегда в конец файла, вот это тебе и будет уже самая что нинаесть сортировка по дате. Выхватываешь всё по-строчно из этого файла и пишешь в БД, для сортировки делаешь ORDER BY id DESC, и все твои проблемы... -------------------- В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм. ----- |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Да, это уже предлагали
http://forum.vingrad.ru/index.php?showtopi...st&p=648474 Если нужна просто сортировка по времени, то этого достаточно, но мне ещё нужно будет выводить статистику за последние десять дней. Сколько за день было хостов, хитов и тому подобное. |
|||
|
||||
| sugee |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Я поменял тип поля на INT(32) и пишу туда дату непосредственно в формате timestamp
Вывожу так
Это сообщение отредактировал(а) sugee - 19.2.2006, 10:35 |
||||
|
|||||
| -=Ustas=- |
|
|||
![]() Ustix IT Group ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2222 Регистрация: 21.1.2005 Где: Краснодар Репутация: 17 Всего: 69 |
Вот тебе набросал как примерчик, для получения timestamp в твоем случае:
Хотя...может можно как-то и оптимизировать, просто всё на скорую руку... -------------------- В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм. ----- |
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 4 Всего: 73 |
Думаю это будет побыстрее прегов. Пишем $stmp в базу в поле типа int(10). Ставим на него индексы (в связке с другими полями, если те учавствуют в отборе). -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
-=Ustas=-, я применил в своей фунции твой вариант в сочетании с вариантом IZ@TOP.
Вроде не перепутал ничего... Время получается 01.01.1970 // 03:00:01 Начало эпохи Unix если не ошибаюсь
Добавлено @ 19:27 Поле int(10) |
|||
|
||||
| -=Ustas=- |
|
|||
![]() Ustix IT Group ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2222 Регистрация: 21.1.2005 Где: Краснодар Репутация: 17 Всего: 69 |
sugee, в варианте Изотопа маленькое упущение, которое ты должен был заметить, прочитав про формат входных данных функции strtotime() ;) Попробуй так:
-------------------- В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм. ----- |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Нет, то же самое получается.
|
|||
|
||||
| -=Ustas=- |
|
|||
![]() Ustix IT Group ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2222 Регистрация: 21.1.2005 Где: Краснодар Репутация: 17 Всего: 69 |
хм... действительно. Ну попробуй тогда полностью мою функцию применить, хоть и немного дольше обрабатывает, на зато наверняка
-------------------- В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм. ----- |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
А вот теперь происходит очень интересная вещь.
date() перед записью в базу даёт правильный результат, а вот из базы выводится все то же 01/01/70 03:00:00.
|
|||
|
||||
| -=Ustas=- |
|
|||
![]() Ustix IT Group ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2222 Регистрация: 21.1.2005 Где: Краснодар Репутация: 17 Всего: 69 |
sugee, здрасте, а кто будет переменной $time значение присваивать?!
-------------------- В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм. ----- |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: нет Всего: 4 |
Да, можно было бы ещё долго разбираться в тонкостях форматов времени! Теперь всё на месте, только пожалуй функцию MakeTime() я опять приведу к изотоповскому виду. |
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 4 Всего: 73 |
-=Ustas=-, эй, товарищи, оно работает. Пробел съелся! Я уже везде проверил - везде работает.
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| -=Ustas=- |
|
|||
![]() Ustix IT Group ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2222 Регистрация: 21.1.2005 Где: Краснодар Репутация: 17 Всего: 69 |
Не может такого быть! (Хотя...может только сегодня... Я только что попробовал, без пробела - вообще дату не хавает, возвращает -1, с пробелом совсем не те года подставляет. Добавлено @ 21:07 Появилась еще одна особенность, если допустим в такой дате 22/Feb/2006:20:56:11 количество секунд превышает число 37, то всё, дата не переводится в timestamp. И еще, IZ@TOP, я незнаю как ОНО могло у тебя сработать, у меня такую дату - 22/Feb/2006:20:56:36 перевело как 22 февраля 2036 года -------------------- В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм. ----- |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |