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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сортировка по времени 
:(
    Опции темы
sugee
Дата 17.2.2006, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В одно из полей таблицы записываются даты в формате UTC, то есть в таком виде [02/Feb/2006:11:29:49 +0300].
Точнее говоря само поле у меня сейчас имеет тип text, я с этим ещё не определился.
При выводе нужно будет сортировать записи по времени.
Может лучше записывать время в базу данных в формате datetime, тогда не будет проблем с сортировкой, но как перевести его в этот формат?


PM MAIL   Вверх
Нурик Сакура
Дата 17.2.2006, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


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

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



Как я у себя делал:

в таблице есть поле Created формата DATETIME

заносится время вот так:
Код

$Query = "insert into YourTableName (Created) values (" . NOW() . "); ";


выводится:
Код

$dateToUse = Date("U");
$Query = "select Created from YourTableName order by Created asc /* (или desc) */ ";

while(условие)
{
    print("Сообщение №какой-то добавлено ({$row['Created']}) кем-то там\n");
}


Это сообщение отредактировал(а) Nurik - 17.2.2006, 20:58
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
sugee
Дата 17.2.2006, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Nurik, я перечитал свой пост, там действительно не совсем ясно о чём речь идёт. Мне не текущее время нужно, я читаю записи из файла(лог Apache) и заношу их базу данных. Потом надо будет выводить записи отсортированные по времени.
В чем собственно и вопрос: как сортировать записи по времени записанному в таком формате [02/Feb/2006:11:29:49 +0300].
PM MAIL   Вверх
Нурик Сакура
Дата 17.2.2006, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


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

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



Попробуй так:

Код

$Query = "select YourFieldName from YourTableName order by Created asc /* (или desc) */ ";


Это сообщение отредактировал(а) Nurik - 17.2.2006, 20:57
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
sugee
Дата 17.2.2006, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Nurik, если бы всё было так просто я бы не спрашивал.
Посмотри на формат записи, что такое с точки зрения SQL(или PHP)
Feb или Jan? Просто набор символов...
Нужно привести дату в человеческий формат, который можно сортировать, например datetime.
PM MAIL   Вверх
Нурик Сакура
Дата 17.2.2006, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


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

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



Хех, даже не знаю. Только что пересмотрел учебник по ПХП (прошу не смеятся, я токо учусь), там есть такой вариант, как strtotime, но такой формат, как у тебя он не поддерживает, увы...
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
sugee
Дата 17.2.2006, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нет в принципе функцию перевода в datetime можно написать самому,
но неужели других способов нет?
Ведь эту функцию придется применять к каждой строке файла, а их у меня 25 тысяч, я ещё в скрипте регулярку ипользую, это сколько ж придется ждать пока этот скрипт что-то выдаст?



Это сообщение отредактировал(а) sugee - 18.2.2006, 12:39
PM MAIL   Вверх
Нурик Сакура
Дата 17.2.2006, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 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

Цитата

PHP-скрипт дает возможность получения практически любого отчета о посещаемости Вашего сайта, анализируя стандартный log файл сервера Apache. Возможности отчетов: по хостам посетителей, по рефферам (откуда зашли) и их серверам отдельно, по UserAgent, по вашим страницам и тд. Возможность конструировать собственный отчет.

Добавлено @ 22:36
Или вот, но я не уверен, на ПХП ли оно: Webaliser

Это сообщение отредактировал(а) Nurik - 17.2.2006, 22:28
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
sugee
Дата 18.2.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Только что провёл эксперимент:
Код

date("Y-m-d H:i:s","25/Dec/2005:04:12:17"); 


Результат такой: 1970-01-01 03:00:25
PM MAIL   Вверх
Нурик Сакура
Дата 18.2.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


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

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



Короче, как я понял, тебе нужно преобразовать дату, получаемую из логов, и уже потом с ней работать.
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
sugee
Дата 18.2.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(sugee @ 17.2.2006, 21:20 Найти цитируемый пост)
что такое с точки зрения SQL(или PHP)
Feb или Jan? Просто набор символов...
Кстати, это я погорячился. smile

Это сообщение отредактировал(а) sugee - 18.2.2006, 12:37
PM MAIL   Вверх
sugee
Дата 18.2.2006, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Nurik @ 17.2.2006, 20:57 Найти цитируемый пост)
Попробуй так:


код PHP
1:

$Query = "select YourFieldName from YourTableName order by Created asc /* (или desc) */ ";


Вообще-то именно так, так что мой топ в принципе лишён всякого смысла.

Nurik, держи плюс!
PM MAIL   Вверх
-=Ustas=-
Дата 18.2.2006, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

Репутация: 17
Всего: 69



sugee, ну зачем же сразу так отчаиваться?!
Во-первых, хранить дату надо в Unix timestamp, т.к. с ней можно вытворять, что только душе угодно.
Во-вторых, у тебя в этой строке (02/Feb/2006:11:29:49 +0300) есть абсолютно всё, что нужно. Бери, разбирай эту строчку, приводи её к timestamp, и записывай в БД.

В чем собсна проблема?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
IZ@TOP
Дата 18.2.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Цитата(-=Ustas=- @ 18.2.2006, 14:15 Найти цитируемый пост)
sugee, ну зачем же сразу так отчаиваться?!
Во-первых, хранить дату надо в Unix timestamp, т.к. с ней можно вытворять, что только душе угодно.

Верно. А перевести дату в timestamp, думаю получится при помощи этой функции http://ru2.php.net/strtotime

sugee, и не забудь на дату поставить индекс.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
sugee
Дата 18.2.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

$f=file("log_file");
 
$exp='/^(\S+)\s+(\S+)\s+(\S+)\s+\[(.*)\]\s+"(.*)"\s+(\S+)\s+(\S+)$/';

for($i=0; $i<$all=sizeof($f); $i++) {

preg_match($exp, $f[$i], $pocket);
list($full, $host, $usid, $us, $time, $req, $res, $qbyte)=$pocket;

if($res == 200) {

$timestamp=strtotime($time);

mysql_query("INSERT INTO `logs` VALUES('','{$host}','{$usid}','{$us}','{$timestamp}','{$req}','{$res}','{$qbyte}')");


В базу записывается вот что: 0000-00-00 00:00:00
Цитата(-=Ustas=- @ 18.2.2006, 13:15 Найти цитируемый пост)
sugee, ну зачем же сразу так отчаиваться?!
Да я как раз подумал было что моя проблема решена, точнее говоря что её и не было. Думал я так до тех пор пока не встал вопрос о сортировке по дням.

PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




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


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

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