Считаем количество записей MYSQL на pdo с использованием count и limit

Сегодня хочу вам рассказать как подсчитать количество записей в выводимом результате если у нас стоит limit.

Предположим что у нас есть таблица tbl с 50 записями.

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


select count(*) from tbl

или


select count(*) from tbl where id>=1

Оба запроса выведут результат 50

А что делать если нам необходимо подсчитать количество записей с использованием limit-а


select count(*) from tbl where id>=1 limit 10

В данном случае мы так же получим результат в 50 записей. В таком случае используем подзапрос:


select count(t.id) from ( select id from tbl where id>=1 limit 10 ) t

Тут мы получили количество записей в 10. Если условие более ограничительное и предположим количество записей в базе удовлетворяющих условию where всего 8 то в результате запросы представленного выше вы получите 8, что и было нам необходимо.

Используя библиотеку pdo посчитать можно следующим образом


$query = "select count(t.id) as cnt from ( select id from tbl where id>=1 limit 10 ) t";
$STH = $DBH->query($query);
echo $STH->fetchObject()->cnt;

или так


$query = "select count(t.id) as cnt from ( select id from tbl where id>=1 limit 10 ) t";
$STH = $DBH->query($query);
$cnt = STH2->fetch(PDO::FETCH_NUM);
echo $cnt[0];

Так же хочу отметить что для получения количества записей вне зависимости от limit-а можно использовать SQL_CALC_FOUND_ROWS


SELECT SQL_CALC_FOUND_ROWS * FROM table WHERE column> 1 LIMIT 0, 50;
SELECT FOUND_ROWS();

Добавить комментарий