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

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,但是我写出来有错误,求大虾帮助!



慕娘9325324
浏览 219回答 1
1回答

哈士奇WWW

你这oracle 都不对。你排序后rownum就变化了,这个是在排序前构建,所以编号不是连续的。如下检索:注意排序编号。select rownum,month,sell from sale order by month;ROWNUM MONTH SELL--------- ------ ---------1 200001 10002 200002 11003 200003 12004 200004 13005 200005 14006 200006 15007 200007 160011 200008 10008 200101 11009 200202 120010 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 放入外部查询即可。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL
Oracle