การดึงข้อมูลที่เพิ่มล่าสุด (Most Recent Records) ใน MySQL
เมื่อต้องการดึงข้อมูลที่เพิ่มเข้ามาล่าสุดจากตาราง วิธีมาตรฐานคือใช้ ORDER BY ร่วมกับ LIMIT โดยเรียงลำดับจากคอลัมน์ที่บ่งบอกลำดับการเพิ่มข้อมูล (เช่น Auto Increment ID หรือ Timestamp)
หลักการทำงาน
SELECT * FROM table_name ORDER BY id_column DESC LIMIT n;
- ORDER BY ... DESC: เรียงจากค่ามากไปน้อย (ล่าสุดอยู่บนสุด)
- LIMIT n: จำกัดจำนวนแถวที่ต้องการ
ตัวอย่างเต็มรูปแบบ
สร้างตารางนักเรียนพร้อม Auto Increment ID:
CREATE TABLE DemoTable (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(20)
);
เพิ่มข้อมูล 6 แถว:
INSERT INTO DemoTable (StudentName) VALUES
('Chris Brown'), ('David Miller'), ('John Doe'),
('John Smith'), ('Adam Smith'), ('Carol Taylor');
ข้อมูลทั้งหมดในตาราง:
+-----------+--------------+ | StudentId | StudentName | +-----------+--------------+ | 1 | Chris Brown | | 2 | David Miller | | 3 | John Doe | | 4 | John Smith | | 5 | Adam Smith | | 6 | Carol Taylor | +-----------+--------------+
ดึงข้อมูล 3 แถวที่เพิ่มล่าสุด
SELECT * FROM DemoTable ORDER BY StudentId DESC LIMIT 3;
ผลลัพธ์
+-----------+--------------+ | StudentId | StudentName | +-----------+--------------+ | 6 | Carol Taylor | | 5 | Adam Smith | | 4 | John Smith | +-----------+--------------+
กรณีใช้ Timestamp แทน Auto Increment
หากตารางมีคอลัมน์ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP:
SELECT * FROM table_name ORDER BY created_at DESC LIMIT 10;
ข้อควรพิจารณา
- Auto Increment ID: ใช้ได้ก็ต่อเมื่อไม่มีการลบข้อมูลหรือ RESET ID
- Timestamp: น่าเชื่อถือกว่า แต่ต้องมี Index เพื่อประสิทธิภาพ
- ประสิทธิภาพ: ควรมี Index บนคอลัมน์ที่ใช้ ORDER BY
- Pagination: สำหรับหน้าต่อๆ ไป ใช้
OFFSETร่วมกับ LIMIT
ตัวอย่าง Pagination (หน้าที่ 2, 5 รายการต่อหน้า)
SELECT * FROM DemoTable ORDER BY StudentId DESC LIMIT 5 OFFSET 5;