需求很简单:假设有一个user表,表中实际上有10000条数据,但是我不知道有多少条,我要从数据库中每次取20条数据显示,那么怎么完成呢?
方案一:
首先执行一个
select count(*) as total from user;
上面SQL语句会查出总的记录条数。另外一点,可能这里不只是无条件的查,如果是有条件的查,那么可以使用临时表
select count(*) from user where id>10; 或者 select count(*) from (select id,name from user) as temp;
总的记录条数求出了之后,于是可以使用limit只取一部分数据了:
select * from user limit start,offset;
其实上面的做法完全没有问题,但是我有一个疑问,这里的例子只是从一个表进行操作,而且还是很简单的操作,如果要进行很复杂的连接、分组、去重,如果进行计算的几个表的数据量很大的时候,那么就意味着上面的操作很冗余:
一次是执行完整的操作,然后只取得总的记录条数;
一次是执行完整的操作,然后只取得从start之后的offset条数据。
其实这两次操作的第一步是重合的,那么我就在想能不能只进行一次操作(比如几个表之间的连接、分组、去重等操作),然后又可以获得总的记录条数,又能只取start之后offset条数据
方案二: