关于分页的实现,有如下几种方式:
一、直接全文limit,搜索效率低,
二、先对索引列limit,定位nid,再根据nid筛选数据,
三、首先,前端记录并返回当前页码上数据的nid,然后根据目标页和当前页信息截取部分nid索引列,定位目标页数据nid,筛选数据,
-- 功能描述: -- 若当前页97,每页10条数据,倒叙, -- 实现跳转:上一页 100 99 98 97 96 95 94 93 下一页, -- 方式一:直接全局索引, -- select * from 表名 limit (目标页码-1)*每页条数,每页条数; -- 上一页98页,第980——970条数据 select * from tb1 limit 970,10; -- 下一页96页,第960——950条数据 select * from tb1 limit 950,10; -- 任选第99页,第990——980条数据 select * from tb1 limit 980,10; -- 方式二:通过索引列查找nid,通过nid定位,取数据, -- select * from 表名 where nid<(select nid from 表名 limit 目标页码*每页条数,1) order by nid desc limit 每页条数; -- 上一页98页,第980——970条数据 select * from tb1 where nid<(select nid from tb1 limit 980,1) order by nid desc limit 10; -- 下一页96页,第960——950条数据 select * from tb1 where nid<(select nid from tb1 limit 960,1) order by nid desc limit 10; -- 任选第99页,第990——980条数据 select * from tb1 where nid<(select nid from tb1 limit 990,1) order by nid desc limit 10; -- 方式三:前端记录并返回当前页数据nid,计算目标页数据起始nid -- 若当前页97页的数据nid为976-965, -- 上一页98页,第980——970条数据, select nid from (select nid from tb1 where nid > 976 order by nid asc limit 10) as A order by nid desc limit 1,; select * from tb1 where nid < 上面公式获得的id order by nid desc limit 10; -- 任选第99页,99-97 = 2, select nid from (select nid from tb1 where nid > 976 order by nid asc limit 20) as A order by nid desc limit 1,; select * from tb1 where nid < 上面公式获得的id order by nid desc limit 10; -- 下一页96页,第960——950条数据 select nid from (select nid from tb1 where nid < 965 order by nid desc limit 10) as A order by nid asc limit 1; select * from tb1 where nid < 上面公式获得的id order by nid desc limit 10; -- 任选第93页,97-93 = 4, select nid from (select nid from tb1 where nid < 965 order by nid desc limit 30) as A order by nid asc limit 1; select * from tb1 where nid < 上面公式获得的id order by nid desc limit 10;
浙公网安备 33010602011771号