PHP-oracle 排序后分页

今天根据项目需求用php连oracle做一个消费记录展示,在分页的时候踩了不少坑

1、oracle不同于musql,它没有limit


2、oracle的日期直接查出来和我们常见的YY-mm-dd HH:ii:ss有区别,需要to_char(l.opt_time,'YYYY-MM-DD HH24:MI:SS') as ymd_time


3、使用行号rownum分页时,语句如果是

 select * from (select t.*,rownum as rn from table1 t where uid=*** and status=1 order by create_time desc) where rn between 1 and 5;

这样会有问题,子查询语句会先生成行号再进行desc排序,完全是白排序了好不好


4、见识到3的问题以后我又改了下语句,然后跳进了另一个大坑

 select tab_.*,rownum from (select * from table1 where uid=*** and status=1 order by create_time desc) tab_ where rownum between 1 and 5; 

这回分行正常了,但是每次查询带1的行才有值,什么意思呢?就是 between 1 and 5有值,between 2 and 5 就是空,rownum=1 有值,rownum=2就是空。哇,气得抓耳挠腮


5、百度了一下终于找到正确的写法了,是mysql里没见过的写法(也可能是我见识浅薄)

select tab_.* from(select l.*,ROW_NUMBER() OVER (ORDER BY create_time desc) rn from table1 l
                            where user_id = *** and status = 1 
                        ) tab_ where rn between ".$start." and ".$end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值