如何获取GROUP BY查询的总行数?

从PDO手册中:

PDOStatement :: rowCount()返回 受相应PDOStatement对象执行的最后一个

。 *

如果关联的PDOStatement执行的最后一条SQL语句是 语句,则 语句

。但是, 都可以 此行为 并且便携式应用程序不应该依赖此行为。

我是最近才发现的。我刚刚将数据库抽象层更改为不再使用SELECT COUNT(1)

...,因为仅对实际行进行查询然后对结果进行计数将更加有效。现在PDO不支持!!

我不将PDO用于MySQL和Pg​​SQL,但用于SQLite。有没有一种方法(没有完全改变dbal

back)在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->计数方法(我自己),以取代SELECT ... FROMSELECT COUNT(1)

FROM和刚刚返回(非常低效的,但只限于SQLite PDO)这个数字。但是,这还不够好,因为在上面的示例查询中是a GROUP

BY,这将更改的含义/功能COUNT(1)

回答:

我最终使用的方法非常简单:

$query = 'SELECT a, b, c FROM tbl WHERE oele = 2 GROUP BY boele';

$nrows = $db->query("SELECT COUNT(1) FROM ($query) x")->fetchColumn();

可能不是最有效的方法,但它似乎是万无一失的,因为它实际上可以计算原始查询的结果。

以上是 如何获取GROUP BY查询的总行数? 的全部内容, 来源链接: utcz.com/qa/420064.html

回到顶部