如何以任意顺序获取行的位置?

时间:2011-03-21 10:35:30

标签: mysql sql pagination

我正在对我的SQL结果进行分页(每页10个)。我想找出给定行(id已知的URL)的页面,以便我可以直接跳转到正确的页面。

排序是已知的,但它不是一个简单的ORDER BY id ASC,所以我不能只计算行id < wanted_id

允许使用特定于MySQL的命令和子查询。我想避免变量

任何方法?

编辑让自己清楚......

我有能力得到结果。我需要的是该行的 rank (即那行之前行的行数)。我不是在寻找蛮力方法(我宁愿检索10k ID并以编程方式找到该等级)。

4 个答案:

答案 0 :(得分:0)

执行查询并将结果集插入临时表。除其他外,临时应具有专用的自动增量列。

找到自动增量列的值,其中行包含有问题的ID,执行一些简单的算术来计算行所属的页面,然后给出页面。

答案 1 :(得分:0)

使用第二个查询SELECT COUNT(*) FROM ... WHERE ...。在WHERE子句中,将选定的记录缩小到相关记录之前的记录。

答案 2 :(得分:0)

select *, 
_rowid, 
floor (_rowid / 10)  
from table

抱歉,错过了“无变量”的要求。

您可以使用“限制”跳转到特定页面。

答案 3 :(得分:0)

select count(*) as rank_number
from my_table
order by c1, c2 desc
where 
    c1 <= (select c1 from my_table where id = @id)
    and
    c2 >= (select c2 from my_table where id = @id)