Pregunta

Quiero mostrar una lista de todos los usuarios en mi sitio, pero solo quiero mostrar 10 personas por edad. No sé exactamente cómo hacer esto. Sé cómo hacerlo simplemente mostrando a todos los usuarios en una página, pero eso no es muy bueno, ¿verdad?

Si lo hago con el código que tengo ahora, solo obtendrá los primeros diez usuarios una y otra vez. Quiero poder obtener a todos los usuarios para una consulta única, almacenarla globalmente y luego moverme a través de la lista recuperando los próximos 10 y así sucesivamente para su visualización.

Estoy desarrollando en appengine utilizando Java y Spring Framework algunas de las soluciones en las que he estado pensando,

  1. Almacenar en la sesión y revisar la lista (muy mal, supongo)
  2. entréguelo a la JSP, específicamente a uno de los ámbitos, página, solicitud, etc. Pero creo que la solicitud no funcionará.
  3. Busque un controlador Spring que pueda manejar esto.
¿Fue útil?

Solución

En términos generales, usaría una variable de formulario en su página (a través de GET o POST) llamada 'página', que sería un número. Cuando lo reciba en el servlet, calculará un rango basado en el número de página y las filas configuradas por página.

Echa un vistazo a Búsqueda a través de grandes conjuntos de datos (sí, es Python pero se aplican los mismos principios) y Consultas e índices de Google Documentación de App Engine.

Otros consejos

Si mantiene el tamaño de página en 10, puede recuperar sus 10 usuarios por grupo de edad para cada página según el número de página:

SELECT TOP 10 users FROM myusers 
 WHERE AGE = function(page_number) 
 ORDER BY some_ordering

Espero que la aplicación JPA + sea compatible con este tipo de consulta.

Algunos motores de base de datos proporcionan extensiones útiles para SQL solo para este propósito. Al igual que, en MySQL puedes decir algo como " seleccionar ... lo que sea ... límite 50,10 " ;, donde " 50 " es la fila con la que comenzar y 10 es el número de filas para recuperar. Luego, en la página de visualización, simplemente coloque los botones siguiente y anterior que pasan el número de la fila de inicio correspondiente al servidor para la próxima ejecución en la consulta.

Si el motor SQL que está utilizando no tiene una función tan útil, entonces debe crear una consulta específica " donde " Cláusula basada en el orden de clasificación.

Para tomar un caso simple, suponga que en su ejemplo está mostrando los registros en orden por " nombre_usuario " ;. Puede usar Statement.setMaxRows (10) para limitar las consultas a 10 filas. Luego, en su primera llamada que ejecute, diga, " seleccione ... lo que sea ... del orden del usuario por nombre_usuario " ;. Guarda el último nombre de usuario encontrado. En su próximo botón, devuelve este nombre de usuario al servidor, y la consulta para la próxima llamada es " seleccione ... lo que sea ... de usuario donde user_name > 'xxx' ordenado por user_name " ;, donde 'xxx' es el último nombre de usuario de la llamada anterior. Vuelva a hacer setMaxRows para que nuevamente esté limitado a 10 filas de salida. A continuación, puede dejar que el usuario recorra toda la salida de esta manera.

Dejar que el usuario retroceda es un poco molesto. Lo he hecho manteniendo una tabla en una variable de sesión con el valor de la clave de inicio para cada página.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top