在项目新的接口中要求可以分页查询,百思不得其解.
直接查询所有数据后,到前端需要的时候进行切割调用不就可以吗?
后来想了想,如果数据量很大,这样的方法是在太繁琐.把所有的数据都查询出来确实不是好的办法.
于是百度了一下,找到了合适的分页查询的方法
通过:
limit ××× offset ×××
比如,在一个数据表中,一共有400条数据.我想每一次查询10条显示到前端,该如何设计SQL语句呢?
page = x; //其中,x为从前端获取的当前的页数,如1.2.3...
limit = 10; //因为每次显示10条数据,所以我们就给limit赋值为10
offset = (x-1) * limit;
SQL = string.Format("select * from sjb limit {0} offset {1}",limit,offset)
这样构造SQL语句,我们就可以通过前端传输过来的当前页面数,去查询所需要的数据.
原理:
在limit后面,我们跟上我们每一次想查询的数据量.比如:我们想查询5行,我们就可以写"litmit 5"
而在offset后面,用大白话来说,就是忽略掉包括×××之前所有的数据,从第×××+1条数据开始查询 比如,我们相查询第11-20条数据
我们就可以写: limit 10 offset 10
在上面的例子中,我们每次查询10行查询400条数据
首先可以确定limit后面的数据是10
然后确定每次忽略的数据量
当我们返回页数为1时候,忽略前0 * 10条数据
当我们返回页数为2时候,忽略前1 * 10条数据
当我们返回页数为3时候,忽略前2 * 10条数据
当我们返回页数为4时候,忽略前3 * 10条数据
.
.
.
.
当我们返回页数为n时候,忽略前(n-1) * 10条数据
由此构造出offset的值: (x-1) * limit
进而构造出SQL语句