Подсчитываем количество записей в таблице


До сих пор мы выводили данные журнала полностью, но этот способ не рекомендуется использовать - по мере увеличения размера таблицы ее размер может становиться слишком большим, количество записей может достигнуть сотней и тысячей. В такой ситуации вряд ли имеет смысл выводить на экран ее содержимое полностью.

Молено использовать параметр LIMIT, который при использовании вместе с командой SELECT обеспечивает доступ только к определенной части таблицы. Вместе с этим параметром передаются два параметра, первый из которых определяет начало области (отсчет записей начинается с нуля), а второй - число записей, которые входят в данную область. Например, команда LIMIT 0,15 позволяет выбрать записи с номерами от 0 до 14, а команда LIMIT 15,15 - записи от 15 до 29. Команда LIMIT также позволяет выбрать только одну запись, для этого достаточно не указывать второй параметр: LIMIT 1.

Для того чтобы корректно использовать данную команду, необходимо знать, сколько именно записей содержится в таблице, иначе вы можете указать при вызове команды LIMIT те записи, которые просто не существуют.

Не ошибка, но не очень корректный код

Можно просто проигнорировать количество содержащихся записей, скрипт будет продолжать нормально работать. При доступе к несуществующим записям будут просто возвращаться пустые значения, это не приводит к ошибке. Однако такой стиль является примером некорректного и неряшливого кода, и не стоит привыкать писать такие программы.

Число содержащихся в таблице записей можно получить с помощью функции MySQL - эта функция носит название count(), в качестве параметра ей передается символ * (звездочка) и она позволяет получить общее количество записей. Эта функция используется в составе команды select И затем отправляется на сервер с помощью уже известной нам функции mysql_query () :

$query = "SELECT COUNT(*) FROM log";
$sql = mysq_query ($query) ;

После выполнения этого фрагмента кода, как мы уже успели привыкнуть, переменная $sql будет содержать не число, а указатель на ту область памяти, к которой мы можем обращаться и получить собранную SQL-сервером информацию. Для того, чтобы непосредственно считать данные, нам понадобится функция mysql_result(), которой мы должны передать по меньшей мере два параметра. Одним из этих параметров является переменная $sql, которая содержит указатель, а вторым - целое число, которое указывает, сколько именно записей мы хотим считать из базы данных.

Мы можем запросить и получить единственную запись из тех, которые были подготовлены сервером MySQL (необходимо помнить, что нумерация записей начинается с нуля). Например, для получения первой записи мы можем использовать следующую инструкцию:

$number = mysql_result($sql, 0);

Для того, чтобы проверить работу инструкции count, давайте создадим следующий скрипт, который позволит нам получить количество записей, которые содержатся в таблице log:

<html>
<head></head>
<body>
<?
include ("http://localhost/inc/mysql.inc");
$query = "SELECT COUNT(*) FROM log";
$sql = mysql_query($query);
$number - mysql_result($sql, 0);
echo "Таблица содержит $number записей.";
</body>
</html>

Существует также возможность добавить к команде SELECT и дополнительную инструкцию WHERE, которая вместе с COUNT позволяет определить количество записей, которые удовлетворяют каким-то дополнительным условиям.

Например, следующая команда позволяет определить число посещений сайта в определенный день (30 сентября 2006 года):

SELECT COUNT(*) FROM log WHERE date * '2006-09-30';

Здесь мы используем знак равенства для того, чтобы получить записи с указанной датой. Однако сравнение может производиться с любым шаблоном, для этого также можно использовать ключевое слово LIKE и символ %, который заменяет произвольное количество любых символов. Например, с помощью %google% мы можем найти все записи, в которых на любом месте ветре- чается слово google. Необходимо помнить о том, что символьные строки должны заключаться в одинарные кавычки (' ').

Итак, с помощью команды SELECT мы можем извлечь все записи (COUNT(*) ) из таблицы log, в которых в поле referer (WHERE referer) на любой позиции встречается слово «google» (LIKE '%google%'):

SELECT COUNT(*) FROM log WHERE referer LIKE '%google%';

Подобным образом можно подсчитать количество и других записей в таблице, устанавливая совершенно произвольные критерии. Например, для того чтобы определить, сколько посетителей вашего сайта использовали браузер Internet Explorer 6, вы можете использовать следующую команду, которая проверяет, содержит ли поле browser символы MSIE 6.0:

SELECT COUNT(*) FROM logfile WHERE browser LIKE •%MSIE 6.0%';

Показанный ниже скрипт позволяет последовательно получить количество:
• ... всех записей;
• ... посещений на указанный день;
• ... посещений, которые состоялись с помощью Google;
• ... посетителей, которые используют IE 6.0;
• ... посетителей, которые используют браузер на основе Gecko (например, Mozilla).

<html>
<head></head>
<body>
<?
include ("http://localhost/inc/mysql.inc");
$query = "SELECT COUNT(*) FROM logfile";
$sql = mysql_query($query);
$all = mysql_result($sql, 0);
$query = "SELECT COUNT(*) FROM log WHERE date =,'2006-09-30' ";
$sql = mysql_query($query) ;
$day = mysql_result($sql, 0);
$query = "SELECT COUNT(*) FROM log WHERE referer LIKE '%google%' ";
$sql = mysql_query($query);
$google = mysql_result($sql, 0);
$query = "SELECT COUNT (*) FROM log WHERE browser LIKE '%MSIE 6.0%";
$sql = mysql_query ($query);
$ie6 = mysql_result($sql, 0);
$query = "SELECT COUNT(*) FROM log WHERE browser LIKE '%geck6%' ";
$sql = mysql_query($query);
$gesko = mysql_result($sql, 0);
echo "Таблица содержит $all записей.<br>";
echo "Посетителей 28 июля 2006: $day,<br>";
echo "$google посетителей нашли нас чер'ез Google.<br>";
echo "$ie6 человек используют Internet Explorer 6.0.<br>";
echo "$gecko человек используют браузер на движке Gecko<br>";
?>
</body>
</html>

Данный скрипт для ясности записан чрезвычайно подробно и мы легко можем сократить размер кода. Например, можно слить в одну строку три строки, в которых мы определяем используемые переменные, в результате получаем:

$all = mysql_result(mysql_query("SELECT COUNT (*) FROM log", 0));

Скрипт можно упростить еще больше, если определить отдельную функцию, которой мы передаем в качестве параметра условие, по которому производится подсчет имеющихся записей. Если эта функция вызывается с параметром 0, то она возвращает общее число записей, содержащееся в данной таблице.

<?
function mysql_count($where) { if (empty($where)) return mysql_result(mysql_query("SELECT COUNT(*) FROM log"), 0);
else return mysql_result (mysql_query (" SELECT COUNT(*) FROM log WHERE $where"), 0);
}
$all = mysql_count(0);
$day = mysql_count("date = '2006-09-30'");
$google = mysql_count("referer LIKE '%google%'");
$ie6 = mysql_count("browser LIKE '%MSIE 6.0%'");
$gecko = mysql_count("browser LIKE '%gecko%'");
?>

Хотя нам удалось сократить размер кода, однако теперь он стал менее понятным, Мы настоятельно советуем начинающим программистам не прибегать к сокращениям и использованию функций, а для начала создать и отладить скрипт, в котором все действия выполняются последовательно, строка за строкой. Только после того, как такой скрипт начинает работать, вы можете заниматься его дальнейшей оптимизацией (рис. 6.19).

 


Тэги:

Комментарии: 0

Прокомментировать »

 
 
 

Прокомментировать

 
 
Сообщение *
 
Проверочный код *
 
 
 
Яндекс.Метрика