php mysql количество строк в результате
mysqli_stmt::$num_rows
mysqli_stmt_num_rows
Описание
Возвращает количество строк, помещённых в буфер в выражении. Функция будет работать только после вызова mysqli_stmt_store_result() для буферизации всего набора результатов в дескрипторе оператора.
Список параметров
Возвращаемые значения
Целое число ( int ), представляющее количество буферизованных строк. Возвращает 0 в небуферизованном режиме, если с сервера не были получены все строки.
Примеры
Пример #1 Объектно-ориентированный стиль
Пример #2 Процедурный стиль
Результат выполнения данных примеров:
Смотрите также
User Contributed Notes 1 note
Please be advised, for people who sometimes miss to read this important Manual entry for this function:
If you do not use mysqli_stmt_store_result( ), and immediatley call this function after executing a prepared statement, this function will usually return 0 as it has no way to know how many rows are in the result set as the result set is not saved in memory yet.
mysqli_stmt_store_result( ) saves the result set in memory thus you can immedietly use this function after you both execute the statement AND save the result set.
If you do not save the result set but still want to use this function you have to actually loop through the result set one row at a time using mysqli_stmt_fetch( ) before using this function to determine the number of rows.
A thought though, if you want to determine the number of rows without storing the result set and after looping through it, why not just simply keep an internal counter in your loop every time a row is fetched and save the function call.
In short, this function is only really useful if you save the result set and want to determine the number of rows before looping through it, otherwise you can pretty much recreate its use like I suggested.
Подсчёт общего количества строк выборке в mySQL при использовании LIMIT
Один хороший человек хочет попасть на хабр. Для подтверждения своих благих намерений он написал статью, которую я привожу вам.
Наверняка многие знают о существовании в mySQL функции FOUND_ROWS(). Её чаще всего используют для подсчета общего числа строк в таблице, удовлетворяющих заданным условиям. Используют её обычно совместно с директивой SQL_CALC_FOUND_ROWS следующим образом:
Mysql> SELECT SQL_CALC_FOUND_ROWS * FROM table WHERE column > 1 LIMIT 0, 50;
Mysql> SELECT FOUND_ROWS();
Результатом второго запроса будет общее количество строк в таблице «table», удовлетворяющих условию «column > 1» (а не только тех, что были возвращены первым запросом).
Следует учитывать некоторые особенности этой функции, когда используете её без директивы SQL_CALC_FOUND_ROWS, о чём добросовестно предупреждает документация mySQL: в этом случае она вернёт общее количество обработанных строк (не возвращённых!). Например:
Mysql> SELECT * FROM table LIMIT 0, 50;
Mysql> SELECT FOUND_ROWS();
Результатом, как и ожидается, будет «50». Но следующие запросы вернут не слишком ожидаемый результат:
Mysql> SELECT * FROM table WHERE column > 1 LIMIT 50, 50;
Mysql> SELECT FOUND_ROWS();
Mysql> SELECT * FROM table WHERE column > 1 LIMIT 50, 50;
Mysql> SELECT COUNT(*) FROM table WHERE column > 1;
Вопрос: если вариант с использованием функции FOUND_ROWS() действительно быстрее, то почему его не используют повсеместно? Я решил сравнить оба подхода. Для этого была создана таблица:
Таблица содержит три колонки: числовое поле id с auto_increment и PRIMARY-ключом; текстовую колонку column_1 без индекса и текстовую же колонку с индексом column_2. Таблица была заполнена с помощью следующего PHP-скрипта:
Каждый из запросов исполнялся 10 раз с разными параметрами, при этом параметры у «Стандартного» и SQL_CALC_FOUND_ROWS запроса одного типа на одной итерации – одинаковые. Т.е.:
Результаты тестирования можно увидеть на диаграмме:
Узнать количество строк после выполнения sql запроса
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Нужно узнать количество строк после запроса SELECT
$sql = «SELECT marka, model, type, view, year, price, currency, id, photo FROM tablepart WHERE.
Разное время выполнения SQL запроса
Добрый день. Вопрос чисто на знание и мое непонимание )). У меня в php коде есть sQL запрос.
Вывод сообщения после выполнения запроса
Здравствуйте! Прошу помочь: Нужно чтобы запрос сравнивал наличие в БД определенного номера.
Нет возврата после выполнения запроса к базе MySQL
Доброго времени суток! 🙂 Пишу механизм авторизации (login). В качестве хранилища использую базу.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Вывод сообщения после sql запроса
Здравствуйте помогите с sql запросом пожалуйста. Есть такой запрос на PDO: if (isset($_POST))<.
SQL. узнать результат выполнения запроса
Дана реляционная модель базы данных Таблица Customer содержит информацию о клиентах.
Освобождение памяти после выполнения SQL запроса
Моя программа последовательно выполняет простые запросы к двум БД, извекая из них нужные записи. Не.
Все способы, как определить количество строк в MySQL
Дата публикации: 2016-05-27
От автора: один мой знакомый утверждает, что Дед Мороз существует. В него он поверил после того, как его младшему сыну на Новый Год подарили 10 кг шоколадных конфет. Теперь на следующий год придется у Деда Мороза просить пломбы для всех членов семьи! К счастью в веб-программировании можно перестраховаться от таких неожиданностей, и определить количество строк в MySQL заранее.
Зачем знать сколько?
Любая таблица состоит из столбцов и строк. Объем хранящихся в базе данных зависит от того, сколько строк содержится в каждой ее таблице.
Понятно, что от большого числа строк в базе MySQL пломб во рту не прибавится, но все же знание этого параметра может понадобиться при оптимизации работы вашего сайта, для запуска некоторых скриптов и т.д.
Легко!
Для получения в MySQL количества строк не обязательно «кумекать» в составлении SQL-запросов. Достаточно просто открыть в программной оболочке нужную таблицу и посмотреть id последней строки. Именно этот столбец чаще всего используют в качестве уникального ключа, и его значение генерируется автоматически (автоинкремент) путем приращения единицы(+1) к предыдущему.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
В этой базе MySQL количество строк в таблице можно просто посчитать «на пальцах». Но что делать, если в таблице не 7 строк, а несколько сотен? Например, как в этой.
И это лишь одна из восьми страниц выборки. На самом деле число записей может исчисляться не только сотнями, но и тысячами. Вдобавок здесь нет столбца id, потому что он не является обязательным. Его наличие зависит от структуры всей БД, поскольку в ней значения всех строк взаимосвязаны между собой. Получается, что описанный выше метод подсчета строк MySQL не всегда действует.
Несколько правильных методов
Как говорится, первый метод «комом», поэтому рассмотрим несколько более эффективных и менее «простых» способов:
Функция COUNT() – возвращает число строк. Является встроенной функцией SQL. Все таки давайте узнаем, количество записей большой таблицы из БД, скриншот которой приведен выше. Код запроса:
MySQL: самый быстрый способ подсчета количества строк
какой способ подсчета количества строк должен быть быстрее в MySQL?
или, альтернативный вариант:
можно было бы подумать, что первый метод должен быть быстрее, так как это явно территория базы данных, и компонент database engine должен быть быстрее, чем кто-либо другой, при определении таких вещей внутри.
11 ответов
когда вы COUNT(*) Он принимает индексы столбцов count, поэтому это будет лучший результат. Mysql с MyISAM двигатель на самом деле хранит количество строк, это не doensn считать все строки каждый раз, когда вы попытаетесь сосчитать все строки. (на основе столбца первичного ключа)
использование PHP для подсчета строк не очень умно, потому что вам нужно отправить данные из mysql в php. Зачем это делать, когда вы можете достичь того же на стороне mysql?
если COUNT(*) медленно, вы должны выполнить EXPLAIN по запросу и проверьте, действительно ли используются индексы и где они должны быть добавлены.
после выбора нужных строк, вы можете получить счет с этим один запрос:
FOUND_ROWS() должен быть вызван сразу после запроса выбора данных.
в заключение, все на самом деле сводится к тому, сколько записей у вас есть и что находится в инструкции WHERE. Вы действительно должны обратить внимание на то, как используются индексы, когда есть много строк (десятки тысяч, миллионы, и вверх).
после разговора с моими товарищами по команде Рикардо сказал нам, что более быстрый способ:
но вы должны помнить, что результат может быть не точным.
Вы можете использовать его из командной строки:
и вы можете найти полное описание по mysqlperformanceblog
Отличный вопрос, отличные ответы. Вот быстрый способ повторить результаты, если кто-то читает эту страницу и пропускает эту часть:
Я всегда понимал, что даст мне быстрый отклик.
этот запрос (который похож на то, что опубликовал bayuah) показывает хорошую сводку всех таблиц count внутри базы данных: (упрощенная версия хранимая процедура Ивана Качикатари который я очень рекомендую).
SELECT TABLE_NAME AS ‘Table Name’, TABLE_ROWS AS ‘Rows’ FROM information_schema.TABLES WHERE TABLES.TABLE_SCHEMA = ‘ YOURDBNAME ‘ AND TABLES.TABLE_TYPE = ‘BASE TABLE’ ;
Если вам нужно получить количество всего результирующего набора, вы можете принять следующий подход:
это обычно не быстрее, чем использование COUNT хотя можно подумать, что все наоборот, потому что он делает расчет внутри и не отправляет данные обратно пользователю, поэтому подозревается повышение производительности.
выполнение этих двух запросов хорошо для разбиения на страницы для получения итогов, но не особенно для использования WHERE положения.
Я сделал несколько тестов чтобы сравнить время выполнения COUNT(*) vs COUNT(id) (id является первичным ключом индексированной таблицы).
количество испытаний: 10 * 1000 запросов
результаты: COUNT(*) быстрее 7%
мой совет использовать: SELECT COUNT(*) FROM table
я обрабатывал таблицы для немецкого правительства с Иногда 60 миллионами записей.
и нам нужно было знать много раз общее количество строк.
поэтому мы, программисты базы данных, решили, что в каждой таблице всегда есть запись, в которой хранятся общие номера записей. Мы обновили это число, в зависимости от вставки или удаления строк.
мы попробовали все другие способы. Это самый быстрый способ.