为了账号安全,请及时绑定邮箱和手机立即绑定

想实现分页功能,想把Oracle的ROWNUM换掉?该怎么办?

想实现分页功能,想把Oracle的ROWNUM换掉?该怎么办?

慕娘9325324 2022-05-11 20:11:41
String sql="SELECT COUNT(num) FROM yxy";sql="SELECT * FROM (SELECT num,userid,name,ROWNUM rn FROM yxy WHERE ROWNUM? ORDER BY num) temp WHERE temp.rn?";就是实现分页功能,想把Oracle的ROWNUM换掉,因为Mysql用不了ROWNUM,只能用LIMIT,但是我写出来有错误,求大虾帮助!
查看完整描述

1 回答

?
哈士奇WWW

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 放入外部查询即可。



查看完整回答
反对 回复 2022-05-16
  • 1 回答
  • 0 关注
  • 218 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号