亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

想實現分頁功能,想把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 關注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號