¿Cómo obtener el número total de filas de una consulta GROUP BY?

Del manual de PDO:

PDOStatement :: rowCount () devuelve elnúmero de fila afectado por el últimoDELETE, INSERT, o UPDATE instrucción ejecutada por el objeto PDOStatement correspondiente.

Si la última instrucción SQL ejecutada por el PDOStatement asociado fue unSELECCIONA declaración, algunas bases de datos pueden devolver el número de filas devueltas por esa declaración. Sin embargo, este comportamiento esno garantizado para todas las bases de datos y no se debe confiar en él para aplicaciones portátiles.

Lo descubrí hace muy poco. Acababa de cambiar mi capa de abstracción db para no usarSELECT COUNT(1) ... más, porque solo consultar las filas reales y luego contar el resultado sería mucho más eficiente. ¡Y ahora PDO no es compatible con eso!

No uso PDO para MySQL y PgSQL, pero sí para SQLite. ¿Hay alguna manera (sin cambiar completamente el dbal hacia atrás) para contar filas como esta en PDO? En MySQL, esto sería algo como esto:

$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

Con los controladores MySQLi y PgSQL, esto es posible. ¡Con todo PDO no lo es!

PD. Mi solución inicial fue extender el método SQLResult-> count (el mío) para reemplazarSELECT ... FROM porSELECT COUNT(1) FROM y solo devuelve ese número (muy ineficiente, pero solo para SQLite PDO). Sin embargo, eso no es lo suficientemente bueno, porque en la consulta de ejemplo anterior hay unaGROUP BY, lo que cambiaría el significado / función de laCOUNT(1).

Respuestas a la pregunta(11)

Su respuesta a la pregunta