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

คิวรี่ MySQL เลือกข้อมูล N แถวสุดท้าย (Bottom N Records) ด้วย ORDER BY DESC LIMIT

การดึงข้อมูล N แถวสุดท้าย (Bottom N) ใน MySQL

ไม่มีคำสั่ง BOTTOM โดยตรง แต่ทำได้ง่ายด้วย: **เรียงจากมากไปน้อย (DESC) แล้ว LIMIT N**

Syntax

SELECT * FROM table_name ORDER BY column_name DESC LIMIT n;

ตัวอย่าง: ดึง 4 แถวที่มีค่า Value สูงสุด (Bottom 4 ตามค่า)

สร้างตารางและเพิ่มข้อมูล 9 แถว:

mysql> CREATE TABLE DemoTable724 (Value INT);
Query OK, 0 rows affected (0.79 sec)

mysql> INSERT INTO DemoTable724 VALUES 
    (101), (183), (983), (234), (755), (435), (675), (345), (948);
Query OK, 9 rows affected

ข้อมูลทั้งหมด:

mysql> SELECT * FROM DemoTable724;
+-------+
| Value |
+-------+
| 101   |
| 183   |
| 983   |
| 234   |
| 755   |
| 435   |
| 675   |
| 345   |
| 948   |
+-------+
9 rows in set (0.00 sec)

ดึง 4 แถวที่มีค่าสูงสุด (เรียง DESC LIMIT 4):

mysql> SELECT * FROM DemoTable724 ORDER BY Value DESC LIMIT 0, 4;
+-------+
| Value |
+-------+
| 983   |
| 948   |
| 755   |
| 675   |
+-------+
4 rows in set (0.00 sec)

กรณี "Bottom N ตามลำดับ Insert" (ไม่มี Timestamp)

MySQL ไม่รับประกันลำดับ Insert หากไม่มี AUTO_INCREMENT หรือ TIMESTAMP คอลัมน์

-- หากมี Auto Increment ID
SELECT * FROM table ORDER BY id DESC LIMIT n;

-- หากมี Created_at
SELECT * FROM table ORDER BY created_at DESC LIMIT n;

Offset และ Pagination

  • LIMIT 0, 4 = 4 แถวแรก (Offset 0)
  • LIMIT 4, 4 = 4 แถวถัดไป (Offset 4, หน้าที่ 2)
  • LIMIT 4 OFFSET 4 = รูปแบบมาตรฐาน SQL

ประสิทธิภาพ

  • ต้องมี Index บนคอลัมน์ที่ ORDER BY เพื่อหลีกเลี่ยง Filesort
  • LIMIT ทำงานหลัง Sorting (ยกเว้น Index Scan)
  • Offset ใหญ่ (Deep Paging) ช้า → ใช้ Keyset Pagination (WHERE id > last_id)