解决一张表内对不同类型的数据分页加载问题
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,当你想查看上一页数据的时候,只有从该数组中取出来便可以了。
如果还有什么问题或者不懂,欢迎给我留言,我们一起探讨。
* 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,当你想查看上一页数据的时候,只有从该数组中取出来便可以了。
如果还有什么问题或者不懂,欢迎给我留言,我们一起探讨。
相关文章推荐
- 解决Flex4双向绑定因数据类型不同而出现编译错误问题
- access中,有无将文本类型的数据格式转化成数值型的函数?(解决 order by 的非数字排序问题)
- 关于2147217913 从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界 的问题解决方法
- 解决使用HIBERNATE对ORACLE数据库中数据进行排序分页错乱的问题
- 解决 JScript 中使用日期类型数据时出现类型错误的问题
- "数据源不支持服务器端的数据分页"的问题解决
- 总结Asp.net中Page加载PostData的具体过程 进而解决"获取动态创建的控件的PostData数据"问题
- Oracle自定义函数解决数据类型转换出错的问题
- 解决JDBC操作数据库日期类型数据时无法精确到秒的问题
- 解决hibernate中不能正常使用blog类型字段上传数据的问题
- 用oralce连接.net客户端出现问题:“数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行,”的解决办法
- 关于Silverlight对匿名类型数据绑定的问题及其解决方法
- Oracle数据类型引起的性能问题(已经解决)!
- DB2加载数据,数据锁定问题的解决
- 用.net制作排序、分页解决数据大的问题
- OLEDB方式操作规则EXCEL的字符串的完整写法(解决标题行和列数据类型不一致的问题)
- 关于2147217913 从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界 的问题解决方法
- sql server 2005 中的利用ROW_NUMBER() 解决数据分页问题
- 解决“PowerPoint 无法加载类型库msppt.olb”问题