Как я могу посчитать количество строк, которые возвратил запрос mysql?

Вместо использования специальной функции сравнения вы также можете создать тип объекта с помощью специального метода toString() (который вызывается функцией сравнения по умолчанию):

function Person(firstName, lastName) {
    this.firtName = firstName;
    this.lastName = lastName;
}

Person.prototype.toString = function() {
    return this.lastName + ', ' + this.firstName;
}

var persons = [ new Person('Lazslo', 'Jamf'), ...]
persons.sort();
29
задан Jacob Schoen 3 March 2009 в 17:31
поделиться

8 ответов

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

Вы можете просто повторить результат и посчитать их. Вы не говорите, какой язык или клиентскую библиотеку вы используете, но 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();

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

78
ответ дан Paul Dixon 3 March 2009 в 17:31
поделиться

Если вам нужно решить проблему с простым SQL, вы можете использовать подзапрос.

select count(*) from (select * from foo) as x;
18
ответ дан Marcel Zebrowski 3 March 2009 в 17:31
поделиться

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

$query = "SELECT * FROM Employee";
$result = mysql_query($query);
echo "There are ".mysql_num_rows($result)." Employee(s).";
3
ответ дан Robert 3 March 2009 в 17:31
поделиться

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

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
    -> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();
7
ответ дан Stepan Mazurov 3 March 2009 в 17:31
поделиться
SELECT SQL_CALC_FOUND_ROWS *
FROM   table1
WHERE  ...;

SELECT FOUND_ROWS();

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

2
ответ дан Quassnoi 3 March 2009 в 17:31
поделиться

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

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

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

2
ответ дан Trevor Bramble 3 March 2009 в 17:31
поделиться

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

1
ответ дан Drew 3 March 2009 в 17:31
поделиться

Если вы выбираете данные с помощью 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 -> обновить и $ wpdb-> удалить.

1
ответ дан Dave Hilditch 3 March 2009 в 17:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: