У меня есть таблица базы данных, например «предметы». У меня есть график этих элементов, отсортированный по полю ascended_at (datetime). Мне нужно сделать pagination api для такой временной шкалы. Итак, первый мой вариант был:Точная разбивка на страницы по дате времени
HTTP GET /items/timeline?page=[PAGE_NUM]
который стреляет
SELECT * FROM items LIMIT 10 OFFSET [0, 10, 20, ...] ORDER BY ascended_at;
, но вот проблема: когда приходит новый пункт, все страницы смещается на 1 пункт. Чтобы избежать этого, я добавил from_asc_at параметр:
HTTP GET /items/timeline?page=[PAGE_NUM]&from_asc_at=123123123
который стреляет
SELECT * FROM items WHERE ascended_at <= [asc_at_parameter] LIMIT 10 OFFSET [0, 10, 20, ...] ORDER BY ascended_at;
, но это не точно, потому что можно иметь два элемента с одинаковой ascended_at, и вы можете увидеть то же самое элемент на двух разных страницах (но не должен).
Итак, мой вопрос: каковы возможные решения для этого?
- Использовать идентификатор (потому что он уникален)? Но что, если он не упорядочен по ID?
- Любые идеи больше?
Мне кажется, что он не обрабатывает удаление элементов –