需要排序的分页SQL语句(sqlserver)

     在项目中运用sqlserver分页的时候,首先我百度到的是一种top关键字进行分页,具体的代码由于我把sql重写了,就不在svn上面给大家翻出来了,关键的一点是什么,那就是运用top分页以后其实显示出来的是假数据,简单点说就是,你永远看到的就是你的第一页,不管你页数写多少,显示条数是多少,幸好在开发阶段发现这样的低级bug,还好还好。

     真正让我摒弃top的原因是,我项目中要用到order by进行排序,sqlserver又是一个在分页这一块支持的一般的数据库,再加上一个排序,彻底让我和top说了byebye!

   那么需要排序的分页应该怎么写呢?我采用的是row_number() over函数配合with临时表进行实现。话不多说,先上代码。

with temptbl as (
        SELECT ROW_NUMBER() OVER (ORDER BY t.show_count)AS Row,t.* from
(SELECT DISTINCT
    a.id,
    a.film_id,
	a.film_name,
	a.english_name,
	a.[language],
	a.duration,
	a.dimensional,
	a.country,
	a.director,
	a.actor,
	a.opening_date,
	a.[catalog],
	a.picture,
	a.description,
	b.show_count,
	b.rating,
	b.star_picture
FROM
	api_film a
JOIN (
	SELECT DISTINCT
		t1.show_count,
		t1.rating,
		t1.star_picture
	FROM
		api_film t1
	JOIN api_film_show t2 ON t1.film_id = t2.film_id
	JOIN api_film_cinema t3 ON t2.cinema_id = t3.cinema_id
	where t3.cinema_id = #{cinemaId}
) b ON a.show_count = b.show_count ) t)

SELECT * FROM temptbl where Row between #{pageNum} and #{pageSize}

先不论我这条sql写的怎么样,关键在于开头和结尾的sql语句的实现,对于你的排序的需求,

 SELECT ROW_NUMBER() OVER (ORDER BY t.show_count)AS Row,t.* from

就可以帮你实现根据某个字段进行排序,之后创建一个临时表,查询出临时表的数据即可,或者说是上方这条sql查询结果。其实我也发现我这条sql有比较大的问题,后续会进行相应的优化,但是今天是为了记录sql分页功能

SELECT * FROM temptbl where Row between #{pageNum} and #{pageSize}

第一个参数是起始条数,第二个是截止条数,如果代码要用到这条语句,那就要用代码限制一下。

        int pageNums;
        int pageSizes;

        if (pageNum == null) {
            pageNums = 1;
        }else{
            pageNums=pageNum*10-9;
        }
        if (pageSize == null || pageSize == 0||pageNum==1) {
            pageSizes = 10;
        } else {
            pageSizes = pageSize*pageNum;
        }
如果有比较好的分页方式,大家可以联系我。一起交流学习。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值