https://www.flickr.com/photos/8058098@N07/2718571627/
如果資料表中有許多資料,則我們無法很快找到某個欄位值的最高或最低幾筆。此外,當我們只需要排序結果中的前幾筆資料,那麼將資料通通查詢回來,是耗費效能的舉動,也會佔用不少記憶體。
本文將說明如何針對查詢結果,進行排序與分頁。
此篇內容轉載自本人在 iThome 的文章。
一、測試資料
首先認識一下員工資料表的設計。
而以下是測試資料。
二、排序
以下指令是根據到職日遞增排序。
可使用 ORDER BY 語法來排序。而 ASC 代表遞增,遞減為 DESC。若未提供排序方向,則預設為遞增。
以下指令是根據薪水遞減排序。
我們也可透過多個欄位來排序。以下指令是先依據薪水遞減排序,薪水相同者,再依照名字遞增。
值得一提的是,依據文字欄位排序時,MySQL 是不分英文大小寫的。
三、分頁
資料經過排序後,便會有所謂的第 1 筆、第 2 筆、第 7 筆等順序。分頁就是幫助我們取得像第 1 ~ 5 筆、第 6 ~ 10 筆、第 13 ~ 15 筆這種不同區段的資料。
在程式開發的領域中,分頁有兩種操作方式。
第一種是「每頁有 m 筆,我要取第 n 頁」。假設全部有 23 筆資料,且我們事先規定每頁有 5 筆。那麼取第 1 頁會得到第 1 ~ 5 筆,取第 5 頁會得到第 21 ~ 23 筆。
第二種是「先跳過 m 筆,再取接下來的 n 筆」。MySQL 的語法是採用這種概念。
以下指令是取得薪水最高的 3 位員工。會使用 LIMIT 語法。
以下指令是根據到職日遞增排序。定義每頁有 3 筆資料,當我們要取第 2 頁,那就是取第 4 ~ 6 筆。
此處 LIMIT 的參數值有兩個,第一個是跳過的資料數量,第二個是取得的數量。
然而這樣的可讀性不太好,因此也能改用以下的寫法。
使用 OFFSET 語法,可以跳過前面幾筆資料,再用 LIMIT 取得接下來的幾筆。
前面筆者提到分頁有兩種操作方式,它們之間是可以換算的。
假設頁數叫做 page、每頁的資料數量叫做 size,則 offset = size * (page - 1)。
下一篇:【MySQL】排序與分頁
留言
張貼留言