如何获取 GROUP BY 查询的总行数?
从 PDO 手册中:
PDOStatement::rowCount() 返回受相应 PDOStatement 对象执行的最后一个 DELETE、INSERT 或 UPDATE 语句影响的行数。
如果关联的 PDOStatement 执行的最后一个 SQL 语句是 SELECT 语句,则某些数据库可能会返回该语句返回的行数。但是,并非所有数据库都保证此行为,因此不应依赖可移植应用程序。
我最近才发现这一点。我刚刚将我的数据库抽象层更改为不再使用,因为只需查询实际行然后计算结果会更有效率。现在PDO不支持它!?SELECT COUNT(1) ...
我不对MySQL和PgSQL使用PDO,但我对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方法(我自己的)来替换并返回该数字(非常低效,但仅适用于SQLite PDO)。不过,这还不够好,因为在上面的示例查询中,查询是 一个 ,这将改变 .SELECT ... FROM
SELECT COUNT(1) FROM
GROUP BY
COUNT(1)