Сегодня хочу вам рассказать как подсчитать количество записей в выводимом результате если у нас стоит 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();