今天寫模糊查詢的時候,按照時間排序並進行分頁時,在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 DESC
13 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的工作機制相關。根據以上的例子顯然只能先排序後做選擇性獲取結果。若博友能貼出官方文檔解釋,十分感謝~