LIMIT 用錯了好幾次,經常以為LIMIT(10,20) 的意思是檢索第11行到第20行,其實不是! 而應該是檢索從第11行開始的后20行數據。今天定要重新寫一遍避免自己入坑,也順便提醒?下小伙伴哇!
還有一個問題是,可能使用兩次相同的檢索的語句,但是檢索結果確實不同的。怎么解決這個問題其實超easy,見下文。
另外,其實無愛國內的好些個術語,感覺蠻怪的,例如:偏移量。所以下文都是人話!
一、LIMIT 用于限制查詢結果的數量,也叫分頁查詢。
:可被用于查詢表中前10條數據,或查詢表中從第11到第60條數據。
用法:
MySQL LIMIT 接受 1 個 或 2 個 參數。參數必須是一個整數常量。如果給定一個參數,該參數代表返回行數(從第一行數據算起)。
SELECT * FROM table LIMIT 5; -- 檢索表中前5行數據
4. 如果給定兩個參數,第一個參數 i 代表從表格中的第 i + 1 行數據開始檢索,第二個參數 j 代表返回的行數。
SELECT * FROM table LIMIT 5,10; -- 檢索表中第6行到第15行的數據
二、ORDER BY 用于對結果集按照一個列或者多個列進行排序。
: 按照商品價格從大到小,輸出商品名稱和價格。
SELECT column_name FROM table_name ORDER BY column_name ASC|DESC;
三、easy 實例: 組合使用ORDER BY 和 LIMIT 檢索表中倒數第三行數據
步驟: 1. 將表中數據倒序排序;
2. 使用LIMIT 2,1 檢索從第(2+1)個開始的 1 個數據。
SELECT column_name FROM table_name ORDER BY column_name DESC LIMIT 2,1;
四、 執行相同查詢語句,結果不同
在工作過程中,這可能是很常見的失誤,排序分頁結果中有重復數據,或者同一個語句兩次執行結果不同。
例如:執行同樣帶ORDER BY 的查詢,LIMIT 20。結果為排序前20條數據mysql查詢4到10條數據,和LIMIT 40查詢結果中的前20項進行比對,發現不一致。
問題出在哪呢? 答:因為一級排序中有相同字段
例如:按照價格排序,有5種物品的價格一樣,這可能導致兩次檢索的結果中5個物品的順序不同,所以結果當然不一致!
怎么解決? 答:在加一個排序字段,來確保每一行數據都可以被排序
例如:按照價格排序,發現有5中物品的價格一樣,那我們在加一個二級排序字段“數量”,這意味著對相同價格的商品,通過商品數量在進行一次排序,保證有序。
其實總結起來mysql查詢4到10條數據,最好選擇唯一索引作為排序字段,這樣就可以避免以上問題啦!
頭圖致敬 老師,Rene 的作品也是老師制作的每個課件的頭圖。
雷尼·馬格利特(Rene ,1898.11.21-1967.8.15),比利時超現實主義畫家。他對波普藝術的影響十分重大。作品有《戴圓頂硬禮帽的男子》、《夜的意味》、《襲擊》、《白紙委任狀》等。五、: /p/