Подтвердить что ты не робот

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

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

4b9b3361

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