2012-04-10 21 views
9

estado siguiendo ejemplos de here y muchos otros sitios, pero no obtener los resultados esperadosobtiene el número total de filas al utilizar LÍMITE

fragmento de mi código PHP;

$query="SELECT * FROM book"; 
$result=mysql_query($query); 
echo mysql_num_rows($result); //returns 14 


$query="SELECT FOUND_ROWS()"; 
$rtotal=mysql_query($query); 
echo mysql_result($rtotal,0); //returns 14 


$query="SELECT * FROM book LIMIT 0,4"; 
$result=mysql_query($query); 
echo mysql_num_rows($result); //returns 4 


$query="SELECT FOUND_ROWS()"; 
$rtotal=mysql_query($query); 
echo mysql_result($rtotal,0); //returns 4 Why is it 4 and not 14?? 

En el último ejemplo ¿por qué es 4 y no 14? ¿Qué estoy haciendo mal?

Respuesta

18

Añadir un SQL_CALC_FOUND_ROWS a su sentencia de selección: http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_found-rows

Esto obliga MySQL para contar las filas como si la declaración de límite no está presente.

$query="SELECT SQL_CALC_FOUND_ROWS * FROM book LIMIT 0,4"; 
+0

Tenga en cuenta que esto debería agregarse a la tercera consulta. – alexn

+0

gracias !! y esto incluso fue mencionado en el blog que leí, de alguna manera lo extrañé por completo – user6890

2

Su consulta más reciente arrojó 4 filas ($query="SELECT * FROM book LIMIT 0,4";).

Es por eso que devuelve 4 y no 14.


Para citar la documentación:

En ausencia de la opción SQL_CALC_FOUND_ROWS en la última instrucción SELECT éxito, FOUND_ROWS() devuelve el número de filas en el conjunto de resultados devuelto por esa declaración. Si la instrucción incluye una cláusula LIMIT, FOUND_ROWS() devuelve el número de filas hasta el límite.

+1

Wrong. FOUND_ROWS devuelve el número de filas que la consulta previa habría devuelto si no se estableció ningún límite. http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_found-rows – alexn

+1

@alexn: No está mal, consulte la documentación (citada anteriormente). Pero para que funcione como se espera, 'SQL_CALC_FOUND_ROWS' necesita ser agregado. –

+2

Ahora que ha editado su respuesta, es correcta. Usted indicó que no funcionó ya que utilizó un límite en la consulta anterior. Elimino mi voto negativo si su respuesta se edita. – alexn

Cuestiones relacionadas