Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL LIMIT ทำงานก่อนหรือหลัง ORDER BY?

ลำดับการประมวลผล: ORDER BY ก่อน LIMIT

ใน MySQL (และ SQL มาตรฐาน) ORDER BY จะถูกประมวลผลก่อน LIMIT เสมอ

ลำดับการทำงานของ SELECT:

  1. FROM / JOIN
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT (select list)
  6. ORDER BY
  7. LIMIT

ตัวอย่างยืนยัน

mysql> CREATE TABLE LimitAfterOrderBy (
    -> Id INT,
    -> Name VARCHAR(100)
    -> );
Query OK, 0 rows affected (0.50 sec)

mysql> INSERT INTO LimitAfterOrderBy VALUES(101,'John');
mysql> INSERT INTO LimitAfterOrderBy VALUES(102,'Carol');
mysql> INSERT INTO LimitAfterOrderBy VALUES(103,'Bob');
mysql> INSERT INTO LimitAfterOrderBy VALUES(104,'Sam');

ข้อมูลเริ่มต้น (เรียงตาม Id)

mysql> SELECT * FROM LimitAfterOrderBy;
+------+-------+
| Id   | Name  |
+------+-------+
| 101  | John  |
| 102  | Carol |
| 103  | Bob   |
| 104  | Sam   |
+------+-------+
4 rows in set (0.00 sec)

ORDER BY Name แล้ว LIMIT 4

mysql> SELECT * FROM LimitAfterOrderBy ORDER BY Name LIMIT 4;
+------+-------+
| Id   | Name  |
+------+-------+
| 103  | Bob   |
| 102  | Carol |
| 101  | John  |
| 104  | Sam   |
+------+-------+
4 rows in set (0.00 sec)

ผลลัพธ์: ข้อมูลถูกเรียงตาม Name (Bob, Carol, John, Sam) ก่อน แล้วค่อย LIMIT 4

สำคัญสำหรับ Pagination:

-- หน้าที่ 1 (แถว 1-10)
SELECT * FROM table ORDER BY created_at DESC LIMIT 10 OFFSET 0;

-- หน้าที่ 2 (แถว 11-20)
SELECT * FROM table ORDER BY created_at DESC LIMIT 10 OFFSET 10;

ต้อง ORDER BY ก่อน จึงจะได้หน้าที่ถูกต้องและสอดคล้องกัน