การค้นหาข้อมูลในช่วงเวลาล่าสุด 10 นาที
ใช้ฟังก์ชัน DATE_SUB() ร่วมกับ NOW() เพื่อคำนวณเวลา 10 นาทีก่อนหน้า แล้วเปรียบเทียบกับคอลัมน์ datetime
ไวยากรณ์
SELECT * FROM yourTableName
WHERE yourDateTimeColumn >= DATE_SUB(NOW(), INTERVAL 10 MINUTE);
ตัวอย่างการใช้งาน
สร้างตารางผู้ใช้:
CREATE TABLE users (
Id INT NOT NULL AUTO_INCREMENT,
UserName VARCHAR(20),
UserLastseen DATETIME,
PRIMARY KEY(Id)
);
เพิ่มข้อมูลทดสอบ:
INSERT INTO users(UserName, UserLastseen) VALUES('Larry', '2019-01-15 02:45:00');
INSERT INTO users(UserName, UserLastseen) VALUES('Sam', NOW());
INSERT INTO users(UserName, UserLastseen) VALUES('Mike', '2019-01-15 02:30:00');
INSERT INTO users(UserName, UserLastseen) VALUES('Bob', '2019-01-15 15:02:00');
INSERT INTO users(UserName, UserLastseen) VALUES('David', '2019-01-15 14:55:00');
ค้นหาผู้ใช้ที่ online ใน 10 นาทีล่าสุด:
SELECT * FROM users
WHERE UserLastseen >= DATE_SUB(NOW(), INTERVAL 10 MINUTE);
การปรับเปลี่ยนช่วงเวลา
| ช่วงเวลา | คำสั่ง |
|---|---|
| 5 นาที | |
| 1 ชั่วโมง | |
| 1 วัน | |
| 7 วัน | |
| 30 วัน |
คำแนะนำประสิทธิภาพ
- สร้างดัชนี (Index) บนคอลัมน์ datetime ที่ใช้ใน WHERE
- หลีกเลี่ยงการใช้ฟังก์ชันบนคอลัมน์ (เช่น
DATE(UserLastseen) >= ...) เพราะจะทำให้ index ไม่ทำงาน - ใช้
NOW()สำหรับ datetime,CURDATE()สำหรับ date only
หมายเหตุ
หากคอลัมน์เป็น TIMESTAMP จะมีการแปลงโซนเวลาอัตโนมัติ ส่วน DATETIME จะเก็บค่าตรงๆ ตามที่ป้อนเข้าไป