「アイテム」などのデータベーステーブルがあります。これらのアイテムのタイムラインをフィールド ascended_at (datetime) で並べ替えています。そのようなタイムライン用のページネーション 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;
しかし、これは正確ではありません。なぜなら、2 つのアイテムが同じ ascned_at を持つ可能性があり、同じアイテムが 2 つの異なるページに表示される可能性があるからです (ただし、そうすべきではありません)。
だから、私の質問は次のとおりです。これに対する可能な解決策は何ですか?
- ID を使用しますか (一意であるため)? しかし、ID 順でない場合はどうなるでしょうか。
- もっとアイデアはありますか?