PHP в деталях



         

Работа с БД. Анализ логов. - часть 2


$selection[0] = array(

  "name" => "график по дням",

  "select" => array("date_format(date,'%e.%m.%Y') as dday", "count(date) as visits"),

  "group" => array("dday"),

  "order" => array("date DESC"),

  "type" => 1

  );

Элемент "name" ? это название для крутилки, "type" ? тип таблицы. Типов таблиц два ? просто список и список со "столбиками". Если список сортируется по количеству посещений, то столбики в принципе не нужны, а для удобства восприятия, например, графика посещений по дням, график желателен. Остальные элементы можно не комментировать.

В запросе учитываются так же и временные ограничения, и условие, которое ввёл пользователь. Переменная $type ? номер запрашиваемой выборки.

$days = intval($days);

if ($days>0)

  $selection[$type]["where"][] = "date>DATE_SUB(NOW(),INTERVAL $days DAY)";

$where = stripslashes(trim($where));

if (strlen($where)>0)

  $selection[$type]["where"][] = "($where)";

После этого рисуется форма (в крутилках первыми строчками выводятся выбранные значения. Затем строится запрос, которым узнаётся общее количество строк. Это, надо признать, скользкое место, потому что в нём никаких упрощений, просто в отличие от основного запроса, здесь просто отсутствует сортировка. Но количество строк узнаётся "в лоб" ? выбирается всё то же самое и потом делается mysql_num_rows. Если у кого будут идеи, можете прислать мне или публиковать свой анализатор (только ссылку на меня поставьте, пожалуйста).

$amount_request = "SELECT ". implode(", ", $selection[$type]["select"]). " FROM logs ";

if (sizeof($selection[$type]["where"])>0)

  $amount_request .= " WHERE ". implode(" AND ", $selection[$type]["where"]);




Содержание  Назад  Вперед