Debe especificar SQL_CALC_FOUND_ROWS
en el primer SELECT
en sólo el UNION
; en realidad no necesita una consulta externa SELECT
como lo hace cuando usa COUNT(*)
.
A modo de ejemplo, supongamos que tenemos la siguiente consulta LIMIT
ed:
SELECT * FROM my_table1
UNION ALL
SELECT * FROM my_table2
UNION ALL
SELECT * FROM my_table3
LIMIT 0,10;
simplemente podemos escribir:
SELECT SQL_CALC_FOUND_ROWS * FROM my_table1
UNION ALL
SELECT * FROM my_table2
UNION ALL
SELECT * FROM my_table3
LIMIT 0,10;
entonces llamamos:
SELECT FOUND_ROWS();
Este evita algunos gastos indirectos de tener la consulta externa mencionada en su pregunta y en los comentarios de J o la respuesta de Stefanelli (aunque no estoy del todo convencido de que sea una diferencia notable).
creo que vale la pena Reiterando que este sólo funcionará si está utilizando UNION ALL
en lugar de UNION
- Esto es debido a que el número de filas se calcula antes de los duplicados se eliminan, lo que significa que obtendrá el mismo resultado de FOUND_ROWS()
como lo haría si hubiera usado UNION ALL
.
¿Qué pasa con sus soluciones? –