การดึงข้อมูล 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)