1 回答

TA贡献1799条经验 获得超6个赞
你这oracle 都不对。
你排序后rownum就变化了,这个是在排序前构建,所以编号不是连续的。
如下检索:注意排序编号。
select rownum,month,sell from sale order by month;
ROWNUM MONTH SELL
--------- ------ ---------
1 200001 1000
2 200002 1100
3 200003 1200
4 200004 1300
5 200005 1400
6 200006 1500
7 200007 1600
11 200008 1000
8 200101 1100
9 200202 1200
10 200301 1300
真正的oracle分页是先构建子查询排序好输出,然后附加rownum。mysql 也一个原理。
mysql 做这个不用太难,主要是获取集合的自主编号有点技巧。一般构建自主编号集合的方式。
(SELECT @rank:=0) B 就是这个了!
select @rank:=@rank+1 as Ident,A.* from
(
-- 主要是这个子查询输出所要的有限数据就可以了,索引从零开始
select * from test.t_a limit 0,5
)
A ,(SELECT @rank:=0) B
---
我的表是t_a
结果是:
Ident id name
'1', '0', '1'
'2', '1', '2'
'3', '3', '4'
'4', '5', '6'
'5', '7', '8'
--
自动编号有了,你只要把你要获得的查询变成子查询即可。传入起始行和页面条目大小。
结果类似:
select @rank:=@rank+1 as Ident,A.* from
(
-- 主要是这个子查询输出所要的有限数据就可以了,索引从零开始,mysql 目前还不支持动态 limit解析,一般传入的都是静态变量值
SELECT num,userid,name from yxy ordey by num limit ?,?
)
A ,(SELECT @rank:=0) B
以上是页间编号,如果要全纪录自主编号,把 limit 放入外部查询即可。
添加回答
举报