Mysql вывести определенное количество записей. Выборка и подсчет строк одним запросом - SQL_CALC_FOUND_ROWS. Определение числа записей в PHP

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

А что, если нам надо лишь узнать сколько сообщений на форуме имеется. Для этого можно воспользоваться встроенной функцией COUNT() . Эта функция подсчитывает число строк. Причем, если в качестве аргумента этой функции выступает *, то подсчитываются все строки таблицы. А если в качестве аргумента указывается имя столбца, то подсчитываются только те строки, которые имеют значение в указанном столбце.

В нашем примере оба аргумента дадут одинаковый результат, т.к. все столбцы таблицы имеют тип NOT NULL. Давайте напишем запрос, используя в качестве аргумента столбец id_topic:

SELECT COUNT(id_topic) FROM posts;

Итак, в наших темах имеется 4 сообщения. Но что, если мы хотим узнать сколько сообщений имеется в каждой теме. Для этого нам понадобится сгруппировать наши сообщения по темам и вычислить для каждой группы количество сообщений. Для группировки в SQL используется оператор GROUP BY . Наш запрос теперь будет выглядеть так:

SELECT id_topic, COUNT(id_topic) FROM posts GROUP BY id_topic;

Оператор GROUP BY указывает СУБД сгруппировать данные по столбцу id_topic (т.е. каждая тема - отдельная группа) и для каждой группы подсчитать количество строк:

Ну вот, в теме с id=1 у нас 3 сообщения, а с id=4 - одно. Кстати, если бы в поле id_topic были возможны отсутствия значений, то такие строки были бы объединены в отдельную группу со значением NULL.

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

SELECT id_topic, COUNT(id_topic) FROM posts GROUP BY id_topic HAVING COUNT(id_topic) > 2;

В результате имеем:

В уроке 4 мы рассматривали, какие условия можно задавать оператором WHERE , те же условия можно задавать и оператором HAVING , только надо запомнить, что WHERE фильтрует строки, а HAVING - группы.

Итак, сегодня мы узнали, как создавать группы и как подсчитать количество строк в таблице и в группах. Вообще вместе с оператором GROUP BY можно использовать и другие встроенные функции, но их мы будем изучать позже.

От автора: один мой знакомый утверждает, что Дед Мороз существует. В него он поверил после того, как его младшему сыну на Новый Год подарили 10 кг шоколадных конфет. Теперь на следующий год придется у Деда Мороза просить пломбы для всех членов семьи! К счастью в веб-программировании можно перестраховаться от таких неожиданностей, и определить количество строк в MySQL заранее.

Зачем знать сколько?

Любая таблица состоит из столбцов и строк. Объем хранящихся в базе данных зависит от того, сколько строк содержится в каждой ее таблице.

Подобно тому, как число дырок в зубах человека зависит от съеденного ранее объема конфет. Точнее, от общего веса сладостей, которым «одарили» вашего ребенка на Новый Год .

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

Легко!

Для получения в MySQL количества строк не обязательно «кумекать» в составлении SQL-запросов. Достаточно просто открыть в программной оболочке нужную таблицу и посмотреть id последней строки. Именно этот столбец чаще всего используют в качестве уникального ключа, и его значение генерируется автоматически (автоинкремент) путем приращения единицы(+1) к предыдущему.

Чтобы доказать эту «аксиому», откроем в phpMyAdmin таблицу любой БД. Например, таблицу animal. Как видно на скриншоте, значение столбца id идет по порядку, от 1 до.… Так, отставить! А куда убежал котяра с «идентификационным номером» 4? Наверное, опять «собачек» под номерами 5 и 6 испугался

В этой базе MySQL количество строк в таблице можно просто посчитать «на пальцах». Но что делать, если в таблице не 7 строк, а несколько сотен? Например, как в этой.

И это лишь одна из восьми страниц выборки. На самом деле число записей может исчисляться не только сотнями, но и тысячами. Вдобавок здесь нет столбца id, потому что он не является обязательным. Его наличие зависит от структуры всей БД, поскольку в ней значения всех строк взаимосвязаны между собой. Получается, что описанный выше метод подсчета строк MySQL не всегда действует.

Несколько правильных методов

Как говорится, первый метод «комом», поэтому рассмотрим несколько более эффективных и менее «простых» способов:

Функция COUNT() – возвращает число строк. Является встроенной функцией SQL. Все таки давайте узнаем, количество записей большой таблицы из БД, скриншот которой приведен выше. Код запроса:

SELECT COUNT(*) FROM `country`

SELECT COUNT (* ) FROM ` country `

Оказывается в таблице country целых 239 записей! Понятно, что для их подсчета не хватит пальцев ни на руках, ни на ногах (если не использовать конечности других людей или животных)). Как видите, этот способ в MySQL подсчета количества строк работает намного точнее и чаще всего используется .

Но эта функция умеет не только это! Например, с ее помощью можно узнать, сколько из «представленных» в БД стран находятся в Европе:

А еще, сколько раз каждая страна упоминается в таблице. Пример запроса:

SELECT `Name` , COUNT(*) FROM `country` GROUP BY `Name`

SELECT ` Name ` , COUNT (* ) FROM ` country ` GROUP BY ` Name `

С помощью этого запроса мы узнали количество строк в MySQL, в которых упоминается каждая из стран. Из результатов его выполнения видно, что по одному разу.

Чуть не забыл! Если у вас еще нет в наличии базы world, с которой мы сегодня работаем, то ее можно скачать по этой ссылке с официального сайта разработчиков СУБД MySQL. После скачивания архив с ней нужно разархивировать и затем импортировать не сервер БД. В phpMyAdmin это можно сделать через пункт основного меню «Импорт».

Более подробно об этой процедуре я рассказывал в одном из предыдущих материалов.

Функция MAX() – в некоторых случаях она также позволяет в MySQL узнать количество строк в таблице. Почему иногда? Сейчас объясню. Помните первый способ подсчета, который мы рассмотрели в начале. Он подразумевает, что самое большое значение столбца id равно числу записей. Применение данной функции является своего рода «автоматизацией» того метода. MAX() возвращает максимальное значение указанного столбца (id). Для тестирования функции мы будет использовать таблицу city, которая также входит в состав базы world. Код запроса:

SELECT MAX(`ID`) FROM `city`

SELECT MAX (` ID ` ) FROM ` city `

В результате выполнения запроса мы получили значение столбца последней строки. Получается, что MySQL посчитал количество строк.

Если нужно, то можно получить последнюю запись целиком:

SELECT MAX(`ID`),`Name`,`CountryCode`,`District`,`Population` FROM `city`

SELECT MAX (` ID ` ) , ` Name ` , ` CountryCode ` , ` District ` , ` Population ` FROM ` city `

Обратите внимание, что для выборки перед вызовом функции вместо «*» мы перечисляем название всех столбцов. Это особенность синтаксиса при применении встроенных функций в MySQL.

Определение числа записей в PHP

Часто в коде сайтов PHP MySQL количество строк требуется получить для того, чтобы затем передать это значение в качестве входного параметра для дальнейшей обработки. Это можно сделать с помощью следующего кода:

query("SELECT * FROM `country`")) { printf("В таблице %d строк.\n", $result->num_rows); $result->close(); } mysqli_close($con); ?>

Чтобы определить количество записей в таблице MySQL, нужно воспользоваться специальной функцией COUNT().

Функция COUNT() возвращает количество записей в таблице, соответствующих заданному критерию.

Функция COUNT(expr) всегда считает только те строки, у которых результатом выражения expr является NOT NULL .

Исключением из этого правила является использование функции COUNT() со звездочкой в качестве аргумента - COUNT(*) . В этом случае считаются все строки, вне зависимости от того, NULL они или NOT NULL .

Например, функция COUNT(*) возвращает общее количество записей в таблице:

SELECT COUNT(*) FROM table_name

Как посчитать количество записей и вывести на экран

Пример PHP+MySQL-кода для подсчета и вывода общего количества строк:

$res = mysql_query("SELECT COUNT(*) FROM table_name") $row = mysql_fetch_row($res); $total = $row; // всего записей echo $total; ?>

Этот пример иллюстрирует самый простой вариант использования функции COUNT() . Но с помощью этой функции можно выплнять и другие задачи.

Указав определенный столбец таблицы в виде параметра, функция COUNT(column_name) возвращает количество записей этого столбца, которые не содержат значение NULL . Записи со значениями NULL игнорируются.

SELECT COUNT(column_name) FROM table_name

Использовать функцию mysql_num_rows() нельзя, потому что для того, чтобы узнать общее количество записей, нужно выполнить запрос SELECT * FROM db , то есть получить все записи, а это нежелательно, поэтому предпочтительнее использовать функцию count .

$result = mysql_query("SELECT COUNT (*) as rec FROM db");

Использование функции COUNT() на примере

Вот еще один пример использования функции COUNT() . Допустим, есть таблица ice_cream с каталогом мороженого, в которой находятся идентификаторы категорий и названия мороженого.

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

Способ 1. phpMyAdmin

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

Тогда заходим в phpMyAdmin (localhost/tools/phpmyadmin — для Денвера), затем выбираем нужную базу данных, после этого выбираем таблицу, количество строк в которой нужно выяснить, и видим следующее сообщение:

Способ 2. COUNT

Вот так выглядит сам SQL-запрос:

SQL-запрос с условием:

Реализация на PHP:

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

Способ 3. mysql_num_rows

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

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