1

によって注文されたコンテンツフィードがありdate DESC, id DESCます。
date日時ではなく、単なる日付です。
id典型的なINT auto_incrementです。

n「特定の行の後に来る」行を照会する必要があります。(「現在の最後のアイテムより古いアイテムをフェッチする」必要がある無限のスクロールを想像してください)

を照会しますwhere id < :last_idが、問題は、の順序がの順序とdate一貫していないことです_id

クエリを実行しますwhere date < :last_dateが、問題は「1日あたり」に複数のアイテムがあることです。同じ日付を使用するすべてのアイテムを失います。

クエリを実行しますORDER BY date DESC, id DESC LIMIT x, nが、フィードが2つのクエリ間で変更され、新しいアイテムが上部に追加されるため、オフセット全体がシフトする可能性があります。

where date <= :last_date ORDER BY LIMIT date DESC, id DESC LIMIT n+20私の現在のハッキーな解決策は、現在の最新のアイテムの前にある結果を照会してから「手動で」破棄することです。(20以下であることを願っています)。

私は同じような問題に遭遇した最初の人ではないと確信しています...何かアイデアはありますか?

4

2 に答える 2

1

1日に複数のアイテムがある場合は、すでに2番目の並べ替え順序が必要です。idの場合は、次のようにwhere句を記述します。

WHERE date < :last_date OR (date = :last_date AND id < :last_id)
于 2013-02-18T17:43:17.993 に答える
1

タイムスタンプを格納するフィールドを作成できます (+ on update current_timestamp?)。1秒間に複数のエントリを取得することはないと思います。結果が得られたら、最新のタイムスタンプを保存し、次のクエリでこれをスクリプトに渡します。クエリは次のように変更できます。

SELECT * FROM [table] WHERE timestamp_field > [last timestamp] ORDER BY timestamp_field DESC
于 2013-02-18T17:46:17.670 に答える