你的位置:首页 > 数据库

[数据库]MySQL Limit order by


今天写模糊查询的时候,按照时间排序并进行分页时,在mybatis的映射文件中有这样一条sql语句

 1 SELECT 2     <include refid="Base_Column_List"/> 3     FROM USER U 4     WHERE U.status != #{status,jdbcType=VARCHAR} 5     <if test="keyword != null and keyword != ''"> 6       AND 7       ( 8       U.NAME LIKE #{keyword,jdbcType=VARCHAR} 9       OR U.USERNAME LIKE #{keyword,jdbcType=VARCHAR}10       )11     </if>12     ORDER BY U.lastupdateddate DESC13     LIMIT #{offsetNum},#{pageSize}

如果先排序后分页的话就能得到想要的结果,但是反之

SELECT    <include refid="Base_Column_List"/>    FROM USER U    WHERE U.status != #{status,jdbcType=VARCHAR}    <if test="keyword != null and keyword != ''">      AND      (      U.NAME LIKE #{keyword,jdbcType=VARCHAR}      OR U.USERNAME LIKE #{keyword,jdbcType=VARCHAR}      )    </if>    LIMIT #{offsetNum},#{pageSize}    ORDER BY U.lastupdateddate DESC

这样的话就会报错。SQL的执行顺序是from where select。那我可不可以认为,在相同优先级的where条件下谁在前面谁会优先执行,而order是对查询结果的排序,而limit则是对查询结果的选择性获取;如果limit在前的话比较好的结果是对选择性获取之后的

结果再进行排序,能不能得到这样的结果应该和order by的工作机制相关。根据以上的例子显然只能先排序后做选择性获取结果。若博友能贴出官方文档解释,十分感谢~