[英]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.