Pregunta

No dudes en editar el título si sabes cómo formular mejor la pregunta.(El etiquetado también es un problema). El problema puede ser demasiado difícil en esta forma general, así que consideremos un ejemplo concreto.

Obtendrá una pantalla llena de preguntas de stackoverflow al solicitar /questions ?sort=newest página.El enlace de la página siguiente conduce a /questions?page=2 &sort=newest.Supongo que en el lado del servidor, la solicitud se traduce en una consulta SQL con cláusula LIMIT.El problema con este enfoque es que si se agregan nuevas preguntas mientras el usuario navega por la primera página, su segunda página comenzará con algunas preguntas que ya vio.(Si tiene 10 preguntas por página y se agregaron 10 preguntas nuevas, ¡obtendrá exactamente el mismo contenido la segunda vez!)

¿Existe una manera elegante de resolver este problema común?Me doy cuenta de que no es un problema tan grande, al menos no para stackoverflow, pero aún así.

La mejor idea que tengo (aparte de almacenar el historial de solicitudes por cliente) es usar /questions?answer_id=NNN formato.El servidor devuelve una página que comienza con la respuesta solicitada y coloca la identificación de la primera respuesta en la página siguiente en el enlace de la página siguiente.Debe haber una manera de escribir SQL para eso, ¿verdad?

¿Es como se suele hacer?¿O hay una mejor manera?

¿Fue útil?

Solución

Esto no se puede hacer de una manera fácil.Por ejemplo, la lista "Sin respuesta" aquí en stackoverflow está ordenada por número de votos.Entonces, si guardas el último ID de la página que estás viendo (en una cookie, solicitud, sesión, donde sea) y alguien vota a favor de una publicación mientras navegas por la página 2, la página 3 no está completa desde el voto positivo reciente. La publicación podría haberse movido a la página 1 o 2.

La única forma de hacerlo es cargar la lista completa en la sesión de alguien.Por favor no...

Como ya se mencionó, esperemos que la gente ya esté acostumbrada a esto.

Otros consejos

La mayoría de los sitios web que he visto no resuelven este problema: te muestran una página que incluye contenido que ya has visto.

Podrías considerarlo como una característica: cuando haces clic en "siguiente" y ves contenido que ya has visto antes, es una señal de que quieres volver al frente porque hay contenido nuevo.

Etiquete cada pregunta con la hora ingresada en la base de datos, lleve la hora en que se cargó la página principal por última vez como una cookie o parte de la URL y limite la búsqueda a elementos. n a través de n+displaynum a medida que avanzas.

Pero no me molestaría.Este comportamiento es lo suficientemente uniforme como para que la mayoría de los usuarios lo esperen y sirve como indicador de cuándo hay nuevos datos disponibles.Incluso puedes abrir una nueva pestaña/ventana que comience en la parte superior de la lista para ver lo que ha aparecido.

Creo que el SQL (para MySQL) sería:

SELECT * 
FROM   entries 
WHERE  entry_id >= @last_viewed_entry_id 
ORDER BY entry_id 
LIMIT 50
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top