2011-11-22 128 views
2

如果這個解釋不是100%清楚,我很抱歉。用分頁過濾

我想根據用戶的評級列出用戶的順序(然後按其用戶名排序)。實際上我試圖對結果進行分頁,因爲可能會有大量的結果。

我有兩個表:

  • 表答:列 「用戶id」
  • 表B:與列 「等級」 和 「用戶id」 和 「組識別符號」

有其他專欄,但這些在這裏是相關的。

每個用戶都可以使用以下值提交組的評分:-1,0或1,以「評分」記錄。每組的淨評級通過獲得與給定組相對應的「狀態」評分的淨總和來評估。

我有這個基本的查詢:

SELECT groupid, userid, SUM(rating) 
FROM A LEFT JOIN B ON A.userid = B.userid 
GROUP BY A.userid 
ORDER BY SUM(rating) DESC, A.userid ASC 

不過,我想分頁,所以我需要能夠基於先前顯示的最後一個用戶ID進行選擇的結果。

通常,根據任何比userid大的顯示結果篩選結果將很容易。但是,由於我根據SUM(評級)排序了結果,因此實際上沒有順序排序系統。

即使我的用戶標識在結果中沒有按順序排序,是否有一種很好的方法來過濾我的結果以進行分頁?

+0

whats you host ide?或者只是純粹的SQL? – Simon

+0

只是純粹的Mysql – user1059872

+0

我能想到的唯一的事情就是可以在這裏工作,就是創建另一個填充了用戶ID評級順序的表。你會保持這個更新的日期日期評分改變。因此,當您運行整體查詢時,請使用此表與您的表B連接,並按照條款 – Simon

回答

0

您是否嘗試過使用帶偏移量的限制?

http://php.about.com/od/mysqlcommands/g/Limit_sql.htm

+0

的順序使用此順序字段。是的,我嘗試過。極限w /偏移工作正常。問題是獲取將基於最後顯示的用戶標識的「下一個」用戶。 – user1059872

+0

在我使用類似於?p = 29的東西解析了url中的第一行之前,只是將極限加1加到行號 – JPickup

+0

yup,試過......問題在於結果是根據總和評級)而不是用戶標識。因爲結果不是按用戶名順序列出的,所以我不能指定類似於?p = 29的內容。 – user1059872