SQL_CALC_FOUND_ROWS的使用

简介: SQL_CALC_FOUND_ROWS的使用

需求


  经常会有这么一种情况,让你根据条件分页查询学生的信息,最后还要总条数,


  基本操作是两条SQL:


  (1)select * from student where age  = 18 limit 10,10 ;


  (2) select count(*) from student where age  = 18


现在通过一条SQL足矣


低配版本


select  * from student WHERE id < 1000 LIMIT 10,10 ;
select  count(id) from student WHERE id < 1000 ;


高配版本


select SQL_CALC_FOUND_ROWS 
    *
from student 
WHERE id < 1000
LIMIT 10,10;
SELECT FOUND_ROWS() as total_count;


MyBatis中的使用


<resultMap id="BaseResultMap" type="com.Student">
        <id column="id" jdbcType="BIGINT" property="id"/>
        <result column="name" jdbcType="VARCHAR" property="name"/> 
    </resultMap>
    <resultMap id="ExtCountResultMap" type="Integer">
        <result column="total_count" jdbcType="INTEGER" javaType="Integer"/>
    </resultMap>
    <select id="getStudentInfo2" resultMap="BaseResultMap,ExtCountResultMap">
        select
        SQL_CALC_FOUND_ROWS
        * from student where id in
        <foreach collection="ids" item="id" index="i" open="(" close=")" separator=",">
            #{id}
        </foreach>
        <if test="limit != null">
            <if test="offset != null">
                limit ${offset}, ${limit}
            </if>
        </if>
        ;SELECT FOUND_ROWS() as total_count;
    </select>


public interface TestExtDao {
  public List<?> getStudentInfo2(
      @Param("ids") List<Integer> ids,
      @Param("offset") Integer offset,
      @Param("limit") Integer limit);
}


List<?> result = testExtDao.getStudentInfo2(ids, offset, limit);
    List<Student> extResults = (List<Student>) result.get(0);
    Integer count = ((List<Integer>) result.get(1)).get(0);
目录
相关文章
|
SQL 关系型数据库 数据库
DB2 SQL Error: SQLCODE=-302, SQLSTATE=22001, SQLERRMC=null
DB2 SQL Error: SQLCODE=-302, SQLSTATE=22001, SQLERRMC=null
390 0
|
SQL 关系型数据库 MySQL
Could not execute query ---> MySql.Data.MySqlClient.MySqlException: You have an error in your SQL sy
Could not execute query ---> MySql.Data.MySqlClient.MySqlException: You have an error in your SQL sy
49 0
|
关系型数据库 MySQL
报错sql_mode=only_full_group_by
报错sql_mode=only_full_group_by
解决sql update 1292 - Truncated incorrect DOUBLE value:
出现这种错误,我属实焦头烂额了一会儿,这个错误基本可以分为以下两种情况: 一:你的字段类型是varchar,但是你这样进行操作,是不对的, UPDATE StuCose SET Cno=60 应该是: UPDATE StuCose SET Cno='60' 二:你更新操作进行子查询时,需要的两个表的相同的字段的类型不同,比如你的cose表中的Cno是int类型, 但是你的stucose表中是varchar类型 ,这个时候类似这样进行了子查询的update就会报错 UPDA.
650 0
|
关系型数据库 MySQL 索引
MySQL的SQL_CALC_FOUND_ROWS真的很慢么?
分页程序一般由两条SQL组成: SELECT COUNT(*) FROM ... WHERE ....SELECT ... FROM ... WHERE LIMIT ...   如果使用SQL_CALC_FOUND_ROWS的话,一条SQL就可以了: SELECT SQL_CALC_FOUND_ROWS .
1699 0
|
SQL 关系型数据库 MySQL
Mysql报错: ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregate
Mysql报错: ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregate
285 0
|
SQL 关系型数据库 MySQL
Mysql异常'SET OPTION SQL_SELECT_LIMIT=DEFAULT'
在用hive时遇到这样的一个异常,因为hive的元数据是存储在mysql数据库中,所以对于hive表的操作相应的会操作数据库中表的数据,该问题发生于删除表的时候,创建的时候并未产生该异常。经过查阅资料了解到mysql通过jdbc链接的时候会进行测试'SET OPTION SQL_SELECT_LIMIT=DEFAULT',但是5.6以后的版本弃用了set的方式。
3927 0