您的位置:首页 > 其它

解决一张表内对不同类型的数据分页加载问题

2017-08-22 15:59 239 查看
以前我们对一张表进行分页加载数据的时候,那张表数据都是拥有相同的字段,相同的数据结构,所以对这些数据进行分页加载的话,很简单,只需要一句sql语句就搞定:select

* from 表名 limit 偏移量 每页最多几条数据。比如:select * from user limit page*20 20;意思就是每页最多20条数据,page就是你页面中的页码。也许你会说,当表中的数据有成千上万甚至很多时,这样就会有性能问题,没关系,接下来我要说的问题就可以解决这样性能的问题。

不知道你们在做项目的时候有没有遇到过这样需求或者问题,有时我们发现这些需求中它们的数据结构都是差不多的,所以按照关系型数据库的设计原则,我们不需要另外添加多张表,而是添加一个字段type便可区别这写数据。比如说:一张电影表film中,有科幻、爱情、恐怖等等类型,它们其他的数据结构都相同,因此我们在设计的时候,只需要给它添加一个字段type类型便可知道哪部影片是属于什么类型的了。

好了,既然需求有了,那么问题是我们怎么来分页加载电影表中科幻类型的电影呢?这时候再用我们上面简单sql语句已经无法解决该问题了。因为我们需要的只是科幻这一类型数据并且要对其进行分页。

其实,要解决该问题也很简单,还是要借助上面简单的sql,只不过要稍微修改一下就可以了。好了,我直接给出sql语句吧:select *

from film where id >最后一条数据id and type =”科幻” limit 0

20。怎样,看了这句sql知道它为什么既解决性能问题又解决了对同一张表不同类型进行分页加载的问题了吗。

首先是性能问题,众所周知,id字段是有索引的,所以id >最后一条数据id

这一条件可以直接定位到这里,而不再需要扫描最后一套数据id之前的那么多数据,在这里便大大节省了时间,因此性能便大大的提高了。

至于后面那个问题,我想你们也知道,最后那条数据就是你每页加载数据中的最后一条。根据页面中最后一条数据的id便可请轻松实现分页加载了。当然这里还有一个问题就是你根据页面中最后一条数据的id是可以不断的进行下一页数据的加载,那么你有没有想过,要是我想查看上一页的数据呢,那么你怎么给我分页呢?

在这里我给个思路,你可以在前端页面中声明一个数组,用于保存每一页最后一条数据的id,当你想查看上一页数据的时候,只有从该数组中取出来便可以了。

如果还有什么问题或者不懂,欢迎给我留言,我们一起探讨。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐