Tengo una tabla SQL llamada articles desde la cual cargo filas divididas por páginas. Mi SQL es

SELECT ...
ORDER BY $orderCol DESC
LIMIT $offset, $numPerPage

En la página uno, el límite es 0, $numPerPage, en la página dos es $numPerPage, 2 * $numPerPage, etc.

El problema: cuando se inserta una nueva fila antes de que se cargue la página 2, el último artículo de la página 1 será el primer artículo de la página 2, etc. ¿Cómo puedo evitar esto?

Pensé en agregar una cláusula WHERE para seleccionar artículos a partir del último $orderCol, pero este campo no es único (es una fecha en mi caso), así que perderé artículos con el mismo valor aquí. El índice principal también es un problema porque no está ordenado de la misma manera que $orderCol

No es necesario que la fila recién agregada aparezca en ningún momento. Esto requerirá una actualización.

0
Dotan 14 dic. 2016 a las 13:50

2 respuestas

La mejor respuesta

La solución que encontré es agregar una condición en la cláusula WHERE.

Rahul sugirió que debería contar los artículos nuevos desde la consulta anterior y agregarlos al desplazamiento. Esto fue complicado porque, dado que contar los artículos implicaría que puedo ejecutar una consulta que se detiene donde comenzó la anterior, y si tuviera una manera de hacerlo, podría haber hecho que la segunda consulta comience donde la primera < em> terminó .

Entonces me di cuenta de que necesitaba una nueva columna. Lo llamé date-added y la nueva condición es date-added < $time-of-first-query para todas las consultas posteriores. Entonces, el desplazamiento es solo el número de artículos escritos hasta ahora.

0
Dotan 18 dic. 2016 a las 08:18

Tu LIMIT debería ser algo como a continuación. Defina una variable $page que cambiará de 1 .. no.of pages que desee.

LIMIT $offset, $page * $numPerPage

Bien, en ese caso tendrá que volver a calcular su variable $pages y $numPerPage cada vez (en la actualización) y definir la paginación en consecuencia.

1
Rahul 14 dic. 2016 a las 11:04