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 放入外部查詢即可。
添加回答
舉報