Как подсчитать количество строк, возвращаемых запросом mysql?

Как подсчитать количество строк, возвращаемых запросом mysql? используя PHP ..

Получение итоговых строк в результате запроса …

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

Это отображается в PHP, например, как функция mysqli_num_rows . Поскольку вы отредактировали вопрос, чтобы упомянуть, что используете PHP, вот простой пример с использованием функций mysqli:

$link = mysqli_connect("localhost", "user", "password", "database"); $result = mysqli_query($link, "SELECT * FROM table1"); $num_rows = mysqli_num_rows($result); echo "$num_rows Rows\n"; 

Получение количества строк, соответствующих некоторым критериям …

Просто используйте COUNT (*) – см. Подсчет строк в руководстве MySQL. Например:

 SELECT COUNT(*) FROM foo WHERE bar= 'value'; 

Получите полные строки, когда используется LIMIT …

Если вы использовали предложение LIMIT, но хотите знать, сколько строк вы получите без него, используйте SQL_CALC_FOUND_ROWS в вашем запросе, а затем SELECT FOUND_ROWS ();

 SELECT SQL_CALC_FOUND_ROWS * FROM foo WHERE bar="value" LIMIT 10; SELECT FOUND_ROWS(); 

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

В случае, если вам нужно решить проблему с помощью простого SQL, вы можете использовать подзапрос.

 select count(*) from (select * from foo) as x; 

Если ваш SQL-запрос имеет предложение LIMIT , и вы хотите узнать, сколько SQL_CALC_FOUND_ROWS итогов в этом наборе данных вы можете использовать SQL_CALC_FOUND_ROWS а затем SELECT FOUND_ROWS(); Это возвращает количество строк A LOT более эффективно, используя COUNT(*)
Пример (прямо из документов MySQL):

 mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name -> WHERE id > 100 LIMIT 10; mysql> SELECT FOUND_ROWS(); 

Если вы хотите, чтобы результат и число возвращаемых строк делали что-то вроде этого. Использование PHP.

 $query = "SELECT * FROM Employee"; $result = mysql_query($query); echo "There are ".mysql_num_rows($result)." Employee(s)."; 

Предполагая, что вы используете функции mysql_ или mysqli_, на ваш вопрос уже должны были ответить другие.

Однако, если вы используете PDO, нет простой функции для возврата количества строк, полученных при помощи оператора select, к сожалению. Вы должны использовать count () в наборе результатов (обычно назначая локальную переменную).

Или, если вас интересует только число, а не данные, PDOStatement :: fetchColumn () на результат SELECT COUNT (1) ….

 SELECT SQL_CALC_FOUND_ROWS * FROM table1 WHERE ...; SELECT FOUND_ROWS(); 

FOUND_ROWS() необходимо вызывать сразу после запроса.

Если вы извлекаете данные с помощью WordPress, вы можете получить доступ к количеству строк, возвращаемых с помощью $ wpdb-> num_rows:

 $wpdb->get_results( $wpdb->prepare('select * from mytable where foo = %s', $searchstring)); echo $wpdb->num_rows; 

Если вам нужен определенный счет, основанный на запросе на подсчет mysql, вы выполните следующее:

 $numrows = $wpdb->get_var($wpdb->prepare('SELECT COUNT(*) FROM mytable where foo = %s', $searchstring ); echo $numrows; 

Если вы запускаете обновления или удаляются, то количество строк, затронутых, возвращается непосредственно из вызова функции:

 $numrowsaffected = $wpdb->query($wpdb->prepare( 'update mytable set val=%s where myid = %d', $valuetoupdate, $myid)); 

Это также относится к $ wpdb-> update и $ wpdb-> delete.

Поскольку это 2015 год, и устаревшая функциональность mysql_* , это PDO – только визуализация.

 <?php // Begin Vault (this is in a vault, not actually hard-coded) $host="hostname"; $username="GuySmiley"; $password="thePassword"; $dbname="dbname"; // End Vault $b='</br>'; try { $theCategory="fruit"; // value from user, hard-coded here to get one in $dbh = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // prepared statement with named placeholders $stmt = $dbh->prepare("select id,foodName from foods where category=:theCat and perishable=1"); $stmt->bindParam(':theCat', $theCategory, PDO::PARAM_STR,20); $stmt->execute(); echo "rowCount() returns: ".$stmt->rowCount().$b; // See comments below from the Manual, varies from driver to driver $stmt = $dbh->prepare("select count(*) as theCount from foods where category=:theCat and perishable=1"); $stmt->bindParam(':theCat', $theCategory, PDO::PARAM_STR,20); $stmt->execute(); $row=$stmt->fetch(); // fetches just one row, which is all we expect echo "count(*) returns: ".$row['theCount'].$b; $stmt = null; // PDO closes connection at end of script } catch (PDOException $e) { echo 'PDO Exception: ' . $e->getMessage(); exit(); } ?> 

Схема тестирования

 create table foods ( id int auto_increment primary key, foodName varchar(100) not null, category varchar(20) not null, perishable int not null ); insert foods (foodName,category,perishable) values ('kiwi','fruit',1),('ground hamburger','meat',1), ('canned pears','fruit',0),('concord grapes','fruit',1); 

Для моей реализации я получаю вывод 2 для обоих echos выше. Цель вышеуказанных двух стратегий – определить, исходит ли ваша реализация драйвера rowCount, а если нет, искать стратегию возврата.

Из руководства по PDOStatement :: rowCount :

PDOStatement :: rowCount () возвращает количество строк, на которые влияет инструкция DELETE, INSERT или UPDATE.

For most databases PDOStatement :: rowCount () не возвращает количество строк, на которые влияет инструкция SELECT. Вместо этого используйте PDO :: query () для выдачи оператора SELECT COUNT (*) с теми же предикатами, что и ваш запрошенный оператор SELECT, а затем используйте PDOStatement :: fetchColumn (), чтобы получить количество строк, которое будет возвращено. Затем ваше приложение может выполнить правильное действие.