ページネーションを使用しない
データを先頭に追加するものをページ付けすると、2 ページ目を要求するようにデータが重複して取得され、現在のユーザーに関する限り、前のページの終わりが取得されます。
タイムスタンプを使用する
無限のデータ ストリームの通常の手法は、次のようなクエリを使用することです。
SELECT *
FROM foos
WHERE created >= $previousLastTimestamp
ORDER BY created DESC
LIMIT 20
この例では を使用created
していますが、疑似一意の任意のフィールドを使用できることに注意してください。
ページを最初にレンダリングするときに、最後のエントリのタイムスタンプを JavaScript 変数に保存すると、「投稿をさらに取得する」ロジックは次のようになります。
- 最後のタイムスタンプを渡して ajax (get) リクエストを行う
- 上記の sql クエリを実行します (
$this->Foo->find
呼び出しとして)
- あなたのjsで最後のタイムスタンプを更新して、ユーザーが次に「もっと投稿を取得」をクリックしたときにどこにいるのかがわかるようにします
条件を使用する理由>=
は、テスト対象のフィールドに一意の値がない限り、テスト対象の値を持つ複数の行が存在する可能性があるためです。(id) で並べ替える自然に一意のフィールドがある場合は、より大きいまたは等しいを使用する必要はありません。単純により大きいを使用することができ、重複する行について考える必要がなくなります。
これは、従来のページネーションを回避してこのようなシステムを処理する必要がある理由をより詳細に説明するリファレンスです。