¿Cómo contar todas las filas al usar SELECT con LIMIT en la consulta de MySQL?

Tengo una consulta mysql como esta:

SELECT A.ID, A.NAME, B.ID, B.NAME FROM table1 A JOIN table2 B ON ( A.ID = B.TABLE1_ID ) WHERE cond1, cond2, ..., condN LIMIT 10 

Tengo muchas cláusulas where en la consulta. ¿Cómo mejorar esta consulta para obtener también el conteo de filas completo? No quiero usar una solicitud más sin LIMIT.

Lo que estás buscando es esto

 SELECT SQL_CALC_FOUND_ROWS A.ID, A.NAME, B.ID, B.NAME FROM table1 A JOIN table2 B ON ( A.ID = B.TABLE1_ID ) WHERE cond1, cond2, ..., condN LIMIT 10 SELECT FOUND_ROWS(); 

Puede usar SQL_CALC_FOUND_ROWS con FOUND_ROWS () para contar el número de resultados mientras se está ejecutando esa consulta. Básicamente, simplemente agrega ‘SQL_CALC_FOUND_ROWS’ después de ‘SELECT’ y luego ejecuta otra consulta ‘SELECT FOUND_ROWS ()’ después de eso. No es posible volver a enviar el recuento en la misma consulta porque no puede conocer el recuento hasta que finalice la consulta.

Han pasado 4 años desde la última respuesta, pero así es como resolví el problema. Aunque la respuesta de SaltLake produjo un error para mí, me llevó a la respuesta correcta.

 SELECT SQL_CALC_FOUND_ROWS * FROM wholedatabase LIMIT 0,10 UNION SELECT 'TotalRows', FOUND_ROWS(), NULL, NULL, NULL, NULL ORDER BY IssueDate, VolumeNo 

La parte UNION es muy importante, ya que etiqueta la respuesta deseada (número total de filas) que se recupera en el SEGUNDO resultado de selección en el PRIMERO Seleccione resultados.

Otro punto muy importante es que, como se está produciendo una UNIÓN, ambas tablas deben tener el mismo número de columnas. Esto generalmente significa que debe rellenar el SECOND Select con el importantísimo valor FOUND_ROWS () y luego muchos valores NULL.

El resultado final será un comando que devolverá 11 filas de información, con una de estas filas que contiene el número total de filas. Obviamente, deberá excluir la fila TotalRows adicional cuando llegue al uso del resultado.

Solución de http://is.php.net/manual/en/function.mysql-num-rows.php#83647

 SELECT SQL_CALC_FOUND_ROWS '0', z.id FROM zoom AS z LIMIT 0,6 UNION SELECT '1', FOUND_ROWS() ORDER BY `0` DESC , RAND() 

Deberías usar

 SELECT SQL_CALC_FOUND_ROWS A.ID, A.NAME, B.ID, B.NAME, FOUND_ROWS() as rCount FROM table1 A JOIN table2 B ON ( A.ID = B.TABLE1_ID ) WHERE cond1, cond2, ..., condN LIMIT 10