2011-11-22 185 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