>백엔드 개발 >PHP 튜토리얼 >역시간 순서 페이징 쿼리에서는 페이지 전환 중에 새 데이터가 db에 삽입되어 중복된 데이터가 반환됩니다. 이에 대한 좋은 해결책이 있습니까? 모두 감사합니다

역시간 순서 페이징 쿼리에서는 페이지 전환 중에 새 데이터가 db에 삽입되어 중복된 데이터가 반환됩니다. 이에 대한 좋은 해결책이 있습니까? 모두 감사합니다

WBOY
WBOY원래의
2016-08-04 09:22:142011검색

시간 역순으로 페이지 쿼리가 발생합니다. 페이지를 넘기는 동안 새로운 데이터가 DB에 삽입되어 데이터가 중복됩니다. 이에 대한 좋은 해결책이 있습니까? 모두 감사합니다

답글 내용:

시간 역순으로 페이지 쿼리가 발생합니다. 페이지를 넘기는 동안 새로운 데이터가 DB에 삽입되어 데이터가 중복됩니다. 이에 대한 좋은 해결책이 있습니까? 모두 감사합니다

이게 데이터 중복인가요? 페이지를 넘기는 과정에서 누군가 데이터를 삽입했는데, 첫 번째 페이지의 마지막 데이터가 두 번째 페이지에 다시 할당되어 첫 번째 데이터가 되었습니다. 두 번째 페이지에 이 데이터가 두 번 나타납니까?
그렇다면 클라이언트에서 페이징을 하는 것이 좋습니다. 쿼리할 때 쿼리 버튼을 클릭한 시간보다 짧은 데이터가 발견되면 클라이언트에서 페이징하는 것이 좋습니다. 새 데이터가 전혀 검색되지 않으므로 페이징에는 영향을 미치지 않습니다. 이는 타임플래시백이기 때문에 새로운 데이터가 있어도 보이지 않으며, 데이터 누락도 없습니다. 데이터가 다시 로드되고 데이터를 가져오면 새 데이터가 쿼리됩니다.

얼마 전에 모바일 측에서 비슷한 문제를 다루었습니다. 모바일 측에 대한 아이디어를 말씀드리겠습니다.
1. 먼저 풀다운(최신 데이터 가져오기)과 슬라이딩으로 나누어집니다. up (이전 데이터 가져오기)
2. 둘째, 이전 데이터를 가져오기 위해 위로 슬라이드할 때마다 ID를 전달하고 이 ID를 데이터를 가져오는 조건으로 사용합니다. 시간이 역순이라면 기본적으로 id도 역순이라고 가정할 수 있습니다. 방금 전달된 id는 처음을 제외하고 데이터를 얻을 때마다 가장 작은 id여야 합니다. 앞으로는 이 id보다 작은 데이터가 됩니다
3. 처음 데이터를 받을 때는 ID가 없기 때문에 순서대로 첫 번째 데이터만 가져오면 됩니다.

도움이 되었기를 바랍니다!

미안함은 세상에서 가장 좋은 언어입니다.
내 대답은 nodejs를 기반으로 합니다.
하지만 상관없습니다. 그냥 아이디어를 이해하세요.

---------원래 답변------

coding.net의 API를 살펴보니 두 가지 메소드가 더 있는 것을 발견했습니다.
구문은 몽구스를 기반으로 합니다
하나는 페이징과 페이지파이를 통한 것입니다. 예를 들어 페이지가 20개라면 Model.find(query).skip(page*20 - 20).limit(20)입니다.
두 번째는 After, 특히 After로 더 많은 것을 로드하는 것입니다. 나는 이와 같은 것을 개발한 적이 없으며 이후에도 mongodb에 그러한 속성이 있는지 확실하지 않습니다. 그러나 Model.find(query).sort('-time').where({time:{$gt:TIME}}).limit(20)

정렬에 의존하는 것은 상대적으로 간단합니다.

있을지는 잘 모르겠습니다

mongodb에 after와 비슷한 것이 있으면 더 좋을 것 같습니다. (시간은 충돌할 수 있지만 id는 충돌하지 않습니다.)
Model.find(query).sort('-time').after({id:ID}).limit(20)

coding.net에 더 많은 요청 API를 추가했습니다

https://coding.net/api/activities/projects_last?last_id=14959187 받기

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.