Сайтостроительство


         

Анализ посетителей веб-сайта - часть 7


printf("<h4>Распределение по версиям javascript</h4>"); printTable(pDB, "SELECT COUNT(*), js FROM hit GROUP BY js ORDER BY 1 DESC");

printf("<h4>Распределение по наличию java</h4>"); printTable(pDB, "SELECT count(*), java FROM hit GROUP BY java ORDER BY 1 DESC");

printf("<h4>Распределение по наличию cookie</h4>"); printTable(pDB, "SELECT count(*), cookie FROM hit GROUP BY cookie ORDER BY 1 DESC");

/* printf("<h4></h4>"); printTable(pDB, ""); */

LABEL_END: mysql_close(pDB);

DeleteString(day); DeleteString(sql_query); return 0; }

=========Makefile========== all: report

report: report.c itcgi.a gcc report.c -L/usr/local/lib/mysql \ -L/usr/local/lib -I/usr/local/include \ -o report -lmysqlclient /usr/lib/itcgi.a -Wall -O3 strip report

Имеет смысл обратить особое внимание на следующий код.

printf("<h4>Распределение хитов по хостам</h4>"); LString_Format(sql_query, "CREATE TEMPORARY TABLE IF NOT EXISTS hh \ SELECT COUNT(*) as hit, ip FROM hit \ WHERE DATE_FORMAT(it_date, '%%Y-%%m-%%d')='%s' \ GROUP BY ip ORDER BY hit DESC", *day);

mysql_query(pDB, *sql_query); printTable(pDB, "SELECT * FROM hh LIMIT 0,20");

printf("<h4>Среднее количество страниц, открываемых одним пользователем</h4>"); printTable(pDB, "SELECT AVG(hit) FROM hh");

Во-первых, обратите внимание на то, как формируется строка SQL-запроса. При использовании LString_Format вы застрахованы от переполнения буфера и имеете возможность формировать строку с заранее неизвестным размером. Во-вторых, обратите внимание на сам SQL-запрос. Мы сначала создаем временную таблицу hh, а затем выполняем для нее два SQL-запроса. Необходимость использовать временную таблицу вызвана тем, что получить одним запросом среднее количество страниц, открываемых одним пользователем, невозможно. Мы сначала должны посчитать сколько страниц открыл каждый пользователь, а затем посчитать среднее арифметическое.Временная таблица уничтожается автоматически, после завершения соединения с базой либо же после явного вызова DROP TABLE. Помните об этом!



Результат работы CGI-скрипта report за 7 января 2002 года представлен ниже.

2002-01-07




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