Tema: Paginar resultados
Pregunta: ¿Cómo puedo paginar los resultados de una consulta, de modo que sólo se vean X registros en cada página?
Respuesta
Código:
<!--- Definimos las variables estáticas: Número de resultados a mostrar --->
<cfset amostrar = 30>
<!--- Calculamos los resultados que obtendremos --->
<cfquery name="registros" datasource="base">
SELECT Count(*) as totales FROM tabla WHERE condiciones
</cfquery>
<!--- Si no hemos indicado página, es que estamos en la primera --->
<cfif not parameterexists(pagina)><cfset pagina = 1></cfif>
<!--- Generamos las variables dinámicas en función de la página --->
<cfset origen = 1+(pagina*amostrar)-amostrar>
<cfset ultima = Ceiling(registros.totales/amostrar)>
<!--- Hacemos la consulta filtrando por origen (Si usamos MySQL) --->
<cfquery name="resultados" datasource="base">
SELECT campos FROM tabla WHERE condiciones LIMIT #origen#,#amostrar#
</cfquery>
<!--- Si usamos Access, o cualquier otra base de datos que no soporte LIMIT,
deberemos recuperar todos los resultados y filtrarlos en el CFOUTPUT --->
<!--- Ahora pintamos los resultados (MySQL) --->
<cfoutput query="resultados">
<!--- Si no usamos MySQL y, por lo tanto, no hemos podido hacer el filtro en el CFQUERY,
usaremos <cfoutput query="resultados" startrow="#origen#" maxrows="#amostrar#"> --->
#campos#
</cfoutput>
<!--- Ahora generamos los botones Anterior y Siguiente --->
<cfif pagina gt 1><a href="pagina.cfm?pagina=#Eval(#pagina#-1)#">Anterior</a></cfif>
<cfif pagina lt ultima><a href="pagina.cfm?pagina=#Eval(#pagina#+1)#">Siguiente</a></cfif>