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

วิธี Select 10 แถวสุดท้ายใน MySQL

ใช้ Subquery ร่วมกับ ORDER BY ... DESC LIMIT 10 แล้วเรียงกลับ ASC เพื่อให้ลำดับถูกต้อง

สร้างตารางและข้อมูล 12 แถว

mysql> CREATE TABLE Last10RecordsDemo (id INT, name VARCHAR(100));
mysql> INSERT INTO Last10RecordsDemo VALUES 
    -> (1,'John'),(2,'Carol'),(3,'Bob'),(4,'Sam'),(5,'David'),(6,'Taylor'),
    -> (7,'Sam'),(8,'Justin'),(9,'Ramit'),(10,'Smith'),(11,'Clark'),(12,'Johnson');

Query ดึง 10 แถวสุดท้าย

SELECT * FROM (
    SELECT * FROM Last10RecordsDemo ORDER BY id DESC LIMIT 10
) AS sub ORDER BY id ASC;

ผลลัพธ์ (ได้แถว id 3-12):

+------+---------+
| id   | name    |
+------+---------+
| 3    | Bob     |
| 4    | Sam     |
| 5    | David   |
| 6    | Taylor  |
| 7    | Sam     |
| 8    | Justin  |
| 9    | Ramit   |
| 10   | Smith   |
| 11   | Clark   |
| 12   | Johnson |
+------+---------+

วิธีอื่น (MySQL 8.0+ ใช้ Window Function)

SELECT id, name FROM (
    SELECT id, name, ROW_NUMBER() OVER (ORDER BY id DESC) AS rn
    FROM Last10RecordsDemo
) t WHERE rn <= 10 ORDER BY id ASC;
คำอธิบาย: Subquery เรียง DESC ก่อน LIMIT 10 (ได้ 10 แถวสุดท้าย แต่เรียงกลับ) แล้ว Outer query เรียง ASC กลับมาให้ถูกต้อง