¿Cómo contar el número de filas con LIMIT?


9

Quiero atrapar X filas, por lo tanto, configuré LIMIT X; pero ¿cómo puedo contar simultáneamente el número total de filas también?

Actualmente, uso dos consultas separadas para hacerlo

SELECT COUNT(*) FROM col WHERE CLAUSE
SELECT * FROM col WHERE CLAUSE LIMIT X

¿Hay alguna manera de hacer esto en una consulta?

EDITAR: El resultado debe ser las colceldas y el número de filas. De hecho, después de seleccionar las colceldas, debe caminar sobre la mesa para contar solo.

Sé que no es posible fusionar estas dos consultas, ya que la primera devuelve 1 fila, pero la segunda X filas. Tengo curiosidad por saber si hay una función en mysql para devolver el número de filas en presencia de LIMIT.


¿Podría mostrar una o dos líneas de su salida deseada?
dezso

1
Las dos consultas no son compatibles, como están escritas actualmente: una devuelve un solo registro con una sola columna, la otra devolverá muchas columnas en X filas. Muestre un ejemplo de la salida deseada si desea que le demos una respuesta significativa.
FrustratedWithFormsDesigner

Respuestas:


5

Parece que desea ejecutar el LÍMITE, pero aún sabe cuántas filas se habrían devuelto sin el LÍMITE. Echa un vistazo a FOW FOUND


1
Hacer +1 para esto FOUND ROWS, y aunque todavía está ejecutando dos consultas, puede ser un mejor rendimiento que ejecutar una segunda consulta COUNT (*) (dependiendo de las consultas y el conjunto de datos).
Derek Downey el

Esto es EXACTAMENTE lo que quise decir. Sabía que mysqleso no nos dejaría solos en un tema tan importante;)
Googlebot

1
Me alegra que eso ayude. No se preocupe, mysql aún lo atormentará en varios temas importantes.
Alain Collins el

@DTest: o (puede ser) peor rendimiento que ejecutar una segunda consulta COUNT (*).
ypercubeᵀᴹ

@ypercube precisamente
Derek Downey

3

Use SQL_CALC_FOUND_ROWSen su consulta SELECT y luego ejecute SELECT FOUND_ROWS():

SELECT SQL_CALC_FOUND_ROWS field_name,filed_name2 FROM col WHERE CLAUSE LIMIT X;
SELECT FOUND_ROWS() ;

1
Esto se beneficiaría de una limpieza y algunos detalles más para que sea más útil.
RLF

2

Sé que este es antiguo pero ya no es válido, con MySQL> = 8.0.17 cf Función MySQL Found_Rows () Por lo tanto, todavía tenemos que emitir ambas consultas, es decir. agregue uno con COUNT(), desafortunadamente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.