offset в sql запросе

331
20 января 2017, 10:14

здравствуйте, на моем сайте когда скролл прокручен вниз, прогружаються новости, запросу передается параметр offset (текущее количество div'ов с новостями) и в конце запросе идет параметр DESC LIMIT {offset} 25, тоесть пропускаем количество уже загруженных новостей, и лимит на колво выбранных новостей 25, но есть проблема в том что пока я листаю новости определенного пользователя, если он добавит в это время новую то как бы порядок его новостей смещается, поэтому если во время прогрузки он добавит новость то порядок сместится на 1 вперед и при запросе я получу показанную ранее новость, тоесть оффсет идет с 25ой новости, человек в это время добавил 2 новости, и получается в бд старые 24 и 25 новости которые уже прогруженны становятся 26 и 27 и подгружаются ещё раз, что можно предпринять в данной ситуации?

Answer 1

Не использовать offset. Зачем вам offset? Мало того, что есть описанная проблема, так ещё его невозможно реализовать быстро на больших значениях offset. Потому что offset вычитывает offset + limit записей из выборки лишь затем, чтобы первые offset записей выкинуть.

При загрузке следующей порции данных передавайте идентификатор последней показанной пользователю. Например, если у вас записи показываются вот с такой сортировкой:

select ... from tablename where ... order by created_at, id limit 25

То для загрузки следующих элементов списка передайте значения created_at и id и запросите продолжение списка начиная сразу после этой строки:

select ... from tablename where ...
    and created_at >= :lastrowdate
    and id > :lastrowid
order by created_at, id limit 25
READ ALSO
1 запрос с 4мя JOIN или 4 запроса?

1 запрос с 4мя JOIN или 4 запроса?

Есть запрос такой

309
Как при нажатии на кнопку вывести записи определенной рубрики?

Как при нажатии на кнопку вывести записи определенной рубрики?

На странице есть записи с одной общей рубрикой (ограды) При нажатии на кнопку мне надо вывести записи с новой рубрики (рубрика уже создана)...

302