2013-02-18 109 views
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個查詢之間改變,添加新的項目到頂部,因此移動整個偏移量。

我目前的hacky解決方案是查詢where date <= :last_date ORDER BY LIMIT date DESC, id DESC LIMIT n+20,然後「手動」丟棄在當前最新項目之前出現的結果。 (希望不超過20個)。

我確定我不是第一個遇到類似問題的人......任何想法?

回答

1

如果您每天有多件物品,那麼您應該已經擁有二級排序順序。如果它的id,然後再編寫where子句是這樣的:

WHERE date < :last_date OR (date = :last_date AND id < :last_id) 
+0

+1,傻我..當然! – Roman 2013-02-19 08:17:00

1

您可以創建您存儲時間戳字段(+上更新CURRENT_TIMESTAMP?)。我假設你不會在一秒鐘內獲得多個信息。當你有一個結果,你保存最新的時間戳,然後在下一查詢傳遞給你的腳本。您的查詢可能會更改爲:

SELECT * FROM [table] WHERE timestamp_field > [last timestamp] ORDER BY timestamp_field DESC