簡體   English   中英

SQL:分頁而不從動態表重復

[英]SQL: paging without repetition from an dynamic table

我有一個SQL表稱為articles從我行加載頁面被分割。 我的SQL是

SELECT ...
ORDER BY $orderCol DESC
LIMIT $offset, $numPerPage

在第一頁上,限制為0, $numPerPage ,第二頁上$numPerPage, 2 * $numPerPage等。

問題:在加載第2頁之前插入新行時,第1頁中的最后一篇文章將是第2頁中的第一篇文章,以此類推。如何避免這種情況?

我曾考慮過要添加一個WHERE子句以選擇從最后一個$orderCol開始的文章,但是此字段不是唯一的(在我的情況下,這是一個日期),因此在這里我會錯過具有相同值的文章。 主索引也是一個問題,因為它的排序方式與$orderCol

不必在任何時候出現新添加的行。 這將需要刷新。

您的LIMIT應該類似於以下內容。 定義一個$page變量,該變量將從1 .. no.of pages您想要的1 .. no.of pages

LIMIT $offset, $page * $numPerPage

好的,在這種情況下,您每次(刷新時)都必須重新計算$pages$numPerPage變量,並相應地定義分頁。

我發現的解決方案是在WHERE子句中添加一個條件。

Rahul建議我應該對自上次查詢以來的新文章進行計數,並將其添加到偏移量中。 這是棘手,因為自從計數的文章將意味着我可以運行停在前面的一個開始查詢,如果我有辦法做到這一點,我可能已經很容易地使第二查詢開始第一次結束了在那里。

所以我意識到我需要一個新的專欄。 我稱它為date-added ,新條件是,所有后續查詢date-added < $time-of-first-query 那么,偏移量就是到目前為止所寫文章的數量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM