Как подсчитать количество строк, возвращаемых запросом mysql? используя PHP..
Как подсчитать количество строк, возвращаемых запросом mysql?
Ответ 1
Получение итоговых строк в результате запроса...
Вы можете просто перебрать результат и посчитать его. Вы не говорите, какой язык или клиентскую библиотеку вы используете, но 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();
Для очень больших таблиц это не будет особенно эффективным, и вам лучше будет запускать более простой запрос, чтобы получить счет и кешировать его перед запуском ваших запросов, чтобы получить страницы данных.
Ответ 2
Если вам нужно решить проблему с помощью простого SQL, вы можете использовать подзапрос.
select count(*) from (select * from foo) as x;
Ответ 3
Если ваш SQL-запрос имеет предложение LIMIT
, и вы хотите узнать, сколько итоговых итогов в этом наборе данных вы можете использовать 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();
Ответ 4
Если вы хотите, чтобы результат и число возвращаемых строк делали что-то вроде этого. Использование PHP.
$query = "SELECT * FROM Employee";
$result = mysql_query($query);
echo "There are ".mysql_num_rows($result)." Employee(s).";
Ответ 5
Предполагая, что вы используете функции mysql_ или mysqli_, на ваш вопрос уже должны были ответить другие.
Однако, если вы используете PDO, нет простой функции для возврата числа строк, полученных при помощи оператора select, к сожалению. Вы должны использовать count() в наборе результатов (обычно назначая его локальной переменной).
Или, если вас интересует только число, а не данные, PDOStatement:: fetchColumn() на результат SELECT COUNT (1)...
Ответ 6
SELECT SQL_CALC_FOUND_ROWS *
FROM table1
WHERE ...;
SELECT FOUND_ROWS();
FOUND_ROWS()
должен вызываться сразу после запроса.
Ответ 7
Если вы извлекаете данные с помощью 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.
Ответ 8
Как и в случае с 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
выше. цель из вышеперечисленных 2 стратегий заключается в том, чтобы определить, исходит ли ваша реализация драйвера rowCount, а если нет, искать стратегию возврата.
Из руководства по PDOStatement:: rowCount:
PDOStatement:: rowCount() возвращает количество строк, на которые влияет DELETE, INSERT или UPDATE.
For most databases
, PDOStatement:: rowCount() не возвращает количество строк, на которые влияет инструкция SELECT. Вместо этого используйте PDO:: query() для выдачи оператора SELECT COUNT (*) с тем же предикаты в качестве вашего предполагаемого оператора SELECT, затем используйте PDOStatement:: fetchColumn(), чтобы получить количество строк, которые будут возвращаться. Затем ваше приложение может выполнить правильное действие.