Как получить общее количество строк в запросе GROUP BY? - PullRequest
44 голосов
/ 18 мая 2011

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

PDOStatement :: rowCount () возвращает количество строк , затронутых последним оператор DELETE, INSERT или UPDATE выполнено соответствующим PDOStatement объект.

Если последний оператор SQL выполнен соответствующее PDOStatement было оператор SELECT , некоторые базы данных могут вернуть количество строк, возвращаемых это утверждение . Тем не менее, это поведение не гарантировано для всех базы данных и на них нельзя полагаться для портативных приложений.

Я узнал об этом только недавно. Я только что изменил свой слой абстракции БД, чтобы он больше не использовал SELECT COUNT(1) ..., потому что просто запрос реальных строк и затем подсчет результата будет намного более эффективным. И теперь PDO не поддерживает это!?

Я не использую PDO для MySQL и PgSQL, но я использую для SQLite. Есть ли способ (без полного изменения обратно dbal) подсчитывать строки в PDO? В MySQL это будет примерно так:

$q = $db->query('SELECT a, b, c FROM tbl WHERE oele = 2 GROUP BY boele');
$rows = $q->num_rows;
// and now use $q to get actual data

С драйверами MySQLi и PgSQL это возможно. Со всеми PDO это не так!?

PS. Моим первоначальным решением было расширить метод SQLResult-> count (мой собственный), чтобы заменить SELECT ... FROM на SELECT COUNT(1) FROM и просто вернуть это число (очень неэффективно, но только для SQLite PDO). Это не достаточно хорошо, потому что в приведенном выше примере запроса есть GROUP BY, который изменит значение / функцию COUNT(1).

Ответы [ 11 ]

0 голосов
/ 08 мая 2015

Вы должны использовать rowCount - возвращает количество строк, затронутых последним оператором SQL

$query = $dbh->prepare("SELECT * FROM table_name");
$query->execute();
$count =$query->rowCount();
echo $count;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...