MySQL 4 dispone de una función que nos permite evitarnos los problemas de rendimiento que poseían las dos soluciones que hemos visto hasta el momento.
Comentarios (1/2)
25 comentarios
« 1 2 »
Paginar y ordenar ? (06/06/2007)
Por
Los 3 ejemplos de paginar van muy bien.
El prb lo tienes si en la pagina que muestras el resultado añades algun criterio de filtrado y/o una condicion para ordenar ?
Como canvias la variable $enlace para que tenga en cuenta estos criterios ?
Un saludo y gracias
Por qué no así?: (01/08/2006)
Por
$query=\"SELECT Count(*) AS total FROM people\";
$count=mysql_query($query) or die(mysql_error());
$row=mysql_fetch_row($count);
$total=$row[0];
$total me da el numero total de campos de la tabla people. Es tan solo utilizar el \"Count\" de toda la vida de SQL
Versión SQL (29/05/2006)
Por
Esta función está hecha para conseguir la cantidad total de registros aun cuando haya un LIMIT en el query. Esto es mucho más rápido que verificar en PHP. También es importante saber que esta función está habilitada en MySQL 5.0 que no es aún una versión estable, no es recomendable usarla si no se tiene un servidor o con el permiso de instalación.
Falta el LIMIT en la consulta (24/04/2006)
Por
El articulo es muy bueno, hay que leerse los 3 articulos de paginar consultas para ver las mejoras, nobstante falta la clausa LIMIT en la query SELECT ya que sino bueno pues haces un SQL_CALC_FOUND_ROWS pero siempre vas ha estar pidiendo todos los registros en cada pagina por que no hay clausula de limitacion, asi que en cuanto a efectividad no avanzas nada sino colocas la clausula LIMIT. Tal y como dice la documentacion de MySQL solo tiene sentido hacer el SQL_CALC_FOUND_ROWS en caso de tener una restriccion del resultado por una clausula LIMIT documento de MySQL (http://dev.mysql.com/doc/refman/5.0/en/information-functions.html):
SQL_CALC_FOUND_ROWS and FOUND_ROWS() can be useful in situations when you want to restrict the number of rows that a query returns, but also determine the number of rows in the full result set without running the query again. An example is a Web script that presents a paged display containing links to the pages that show other sections of a search result. Using FOUND_ROWS() allows you to determine how many other pages are needed for the rest of the result.
Así que es importante poner el LIMIT en la query SELECT por que sino no tiene mucha utilidad, ya que siempre vas a estar cargando todos los registros de la tabla o tablas, claro que funcionara el SQL_CALC_FOUND_ROWS, pero sigue siendo igual de ineficiente que el segundo articulo.
Tambien hay que destacar que para uniones complejas no funciona bien el SQL_CALC_FOUND_ROWS:
The use of SQL_CALC_FOUND_ROWS and FOUND_ROWS() is more complex for UNION statements than for simple SELECT statements, because LIMIT may occur at multiple places in a UNION. It may be applied to individual SELECT statements in the UNION, or global to the UNION result as a whole.
Pero si pones parentesis entre los union si que devuelve un resultado correcto.
Bien eso es todo, y buen articulo. Y sobretodo no os olvideis de la clausula LIMIT ;)
Sobre el Resultado incorrecto (24/04/2006)
Por
Carlos T. no puedes hacer:
$total = mysql_query(\"SELECT FOUND_ROWS()\");
así alegremente!!!!!
tienes que hacer:
$result = mysql_query(\"SELECT FOUND_ROWS()\");
$row=mysql_fetch_row($result);
$total=$row[0];
Se trata como si fuera un SELECT tipico, cuando tu haces mysql_query te devuelve un resource. Mira la especificacion de cualquier funcion en www.php.net, aquí te dejo la de mysql_query:
resource mysql_query ( string query [, resource identificador_de_enlace] )
Por lo tanto tienes que coger ese Resource que es lo que a ti te da \'Resource id #5\' y pedirle a ese Resource que te devuelva en este caso la primera fila y unica para esta consulta select con \'$row=mysql_fetch_row($result);\' una vez te devuelta la columan en $row en el primer campo el $row[0] tiene el resultado del total de filas o tuplas de la consulta anteriormente ejecutada.
Sobre paginar (16/03/2006)
Por
Me cuadra pero no veop la funcion paginar por ninguna parte
SENTENCIA LIMIT PARA ACCESS (25/06/2005)
Por
Quisiera saber si la sentencia limit de sql funciona en una BD en access
se me olvidaba (29/03/2005)
Por
... en caso de que se de un error, claro.. :D
muy bueno (29/03/2005)
Por
para la consulta de arriba: la @, si no me equivoco, se utiliza para forzar un mensaje de error de base de datos.
Resultado incorrecto (03/03/2005)
Por
Hola,
gracias al artículo he descubierto estos dos interesantes comando de SQL.
Sin embargo, cuando lo utilizo, se supone que
$total = mysql_query("SELECT FOUND_ROWS()");
debería devolverme un número entero que representa el número total de tuplas que hubiera devuelto una consulta anterior tipo SELECT SQL_CALC_FOUND_ROWS.
EL resultado que yo obtengo es una cadena como esta 'Resource id #5' y no ese total esperado...
¿...?
Uso @ en una función!!! (13/01/2005)
Por
Por qué usas arroba en la linea:
@mysql_fetch_array($result2);
gracias
juan
sorry: otra version de paginado (27/08/2004)
Por
bueno en mi comentario anterior no puse bien el codigo
en la parte del for(){}: sustituyanlo por esto
for($j=-1;$j";echo $j+2;echo " ";
}
Otra version del paginado (27/08/2004)
Por
Esta es mi version, segun creo es mas eficiente por que trabaja con una funcion que internamente utiliza punteros.
/*
$result: identificador del resultado
$nres: numero de registros en pagina
$pag: pagina (empieza con 0)
$nreg: numero de registros totales de consulta
*/
function Pagina($result,$nres,$pag,$nreg){
mysql_data_seek($result,$pag*$nres);
while($row=mysql_fetch_array($result)){
echo $row['nombre'];//aqui se imprimen los datos
if((++$i)==$nres)break;
}
$npag=ceil($nreg/$nres);
for($j=-1;$j";echo $j+2;echo " ";
}
}
asi la invoque e mi codigo:
Pagina($result,4,$pag,mysql_num_rows($result));
No se si me he enterado (25/01/2004)
Por
Hola. He leido el artículo. Me parece muy interesante pero me gustaría saber si me he enterao. Yo ahora para paginar hago dos consultas iguales. La primera obtengo todos los resultados y en la segunda consulta le añado un LIMIT para mostrar página por página. ¿Qué ventajas tendría usando este método que me dice ahí ? Es que no lo he entendido muy bien. Espero que me lo aclareis, me interesa muchísimo. Gracias por adelantado. Nacho Ruiz.
ordenar consulta en varias celdas (10/01/2004)
Por
Bueno, la pregunta es sencilla:
Hago una consulta, lo que quiero es que aparezcan los resultados en dos columnas de por ejemplo 5 resultados en cada una de ellas, y luego paginadas como en el artículo.
Para que se aclaren, sería algo así:
1 2 3 4
5 6 7 8
gracias de antemano.