2012-01-31 46 views
4

我有一個應用程序使用MySql數據庫,它顯示分頁列表的記錄,用戶可以添加新的。我知道如何使用LIMIT等獲得分頁結果,但問題是如何在添加新記錄時訪問特定頁面。如果頁面大小爲20,並且用戶正在查看第一頁,並且他們添加了第23個(比如說100)的記錄,那麼我們如何確定向用戶顯示哪個頁面。MySql分頁結果,找到「頁」的具體結果

因此,從本質上講,如果給定頁面大小和特定記錄,我如何確定哪個「頁面」顯示出頁面。總頁數不包括它們所屬表的所有記錄,但獲取它們的標準是靜態的。


編輯: 我應該更具體。記錄包含一個唯一的ID字段和一個字符串名稱字段。結果記錄按字母順序排列。另外,這是一個Java應用程序。

我能想到的唯一的事情就是選擇按名稱排序的所有需要​​的記錄,然後找出如何在特定記錄的結果中找到位置。從那個位置開始頁碼可以很容易地計算出來,因爲我們知道頁面大小,但是我不確定它們是否是用於在結果中獲取記錄位置的MySql語法。

「愚蠢的」解決方案是隻抓住它們,然後在應用程序代碼(java)中,確定所有結果中的具體記錄位置。但似乎他們必須是一個更有效的方式。

+0

是什麼語言的應用寫在?如何確定他們添加的記錄是第23(您是否通過ID字段或某個字母字段排序)? – Travesty3 2012-01-31 20:57:08

+0

@ Travesty3 - 按名稱字段排序,並在java中排序。用更多細節編輯的問題。 – KurToMe 2012-01-31 22:42:44

回答

13
SELECT COUNT(*) as CNT FROM tbl WHERE name < (SELECT name FROM tbl WHERE id = 42) 

這之後你只劃分CNT價值每頁和圓(Math.floor())量排它

或者你甚至可以做,在SQL:

SELECT FLOOR(COUNT(*)/20) AS page_number ... 
+0

還沒有嘗試過,但是用'name KurToMe 2012-01-31 23:12:12

+0

如果例如名稱字段不是唯一的,或者它們都具有相同的值,該怎麼辦?這個方法重試頁碼:1.但是這個項目可能在每一頁上.. 稍微修正一下:'WHERE name <=(SELECT name FROM tbl WHERE id = 42)AND id <= 42'因爲當名稱字段匹配下一個訂單條件將是ID ..正如我所經歷的。並且'<='因爲如果元素是第21個元素並且我們分數爲20,那麼結果將是1,但是第二頁上的elmenet。 – Kovge 2013-04-22 18:54:28