Как подсчитать количество строк, возвращаемых запросом 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, но хотите знать, сколько строк вы получите без него, используйте 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 (), чтобы получить количество строк, которое будет возвращено. Затем ваше приложение может выполнить правильное действие.