js FROM hit GROUP BY
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 года представлен ниже.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий