2010-03-13 7 views

Respuesta

31

Lo que se busca es this

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(); 
+0

Gracias! Esto funciona bien en el monitor mysql. Pero en PHP, la segunda consulta devuelve 1. ¿Cómo realizar estas dos consultas correctamente en PHP? – SaltLake

+1

¿Qué versión de PHP tienes instalado? Eche un vistazo a este http://stackoverflow.com/questions/674061/sql-calc-found-rows-found-rows-does-not-work-in-php – Shuriken

7

Puede usar el SQL_CALC_FOUND_ROWS with 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.

5

'tis 4 años desde la última respuesta, pero así es como he resuelto 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 sindical es muy importante, porque las etiquetas de su respuesta deseada (número total de filas) que se recupera en el resultado SEGUNDO Seleccionar a los resultados de seleccionar en primer lugar.

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.

-1

Debe utilizar

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 
Cuestiones relacionadas