ใช้ UPDATE ... WHERE ... ORDER BY ... LIMIT 1 เพื่ออัปเดตแถวล่าสุด (หรือแถวเฉพาะ) ของ User คนหนึ่งอย่างแม่นยำ
Syntax
UPDATE table_name SET column_name = new_value WHERE condition ORDER BY sort_column DESC LIMIT 1;
ตัวอย่าง: อัปเดต Login Time ของ User "Carol" ให้เป็นเวลาล่าสุด
1. สร้างตารางและเพิ่มข้อมูล
mysql> create table DemoTable1911 ( UserId int, UserLoggedInTime time, UserName varchar(20) ); Query OK, 0 rows affected (0.00 sec) mysql> insert into DemoTable1911 values(100,'7:32:00','Chris'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1911 values(101,'5:00:00','David'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1911 values(102,'6:10:20','Mike'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1911 values(103,'3:55:00','Carol'); Query OK, 1 row affected (0.00 sec)
ข้อมูลทั้งหมด:
mysql> select * from DemoTable1911;
+--------+------------------+----------+ | UserId | UserLoggedInTime | UserName | +--------+------------------+----------+ | 100 | 07:32:00 | Chris | | 101 | 05:00:00 | David | | 102 | 06:10:20 | Mike | | 103 | 03:55:00 | Carol | +--------+------------------+----------+ 4 rows in set (0.00 sec)
2. อัปเดต Carol ให้ Login Time = '12:30:45' (ใช้ ORDER BY UserId DESC LIMIT 1)
mysql> update DemoTable1911
-> set UserLoggedInTime = '12:30:45'
-> where UserName = 'Carol'
-> order by UserId DESC
-> LIMIT 1;
Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
3. ตรวจสอบผลลัพธ์
mysql> select * from DemoTable1911;
+--------+------------------+----------+ | UserId | UserLoggedInTime | UserName | +--------+------------------+----------+ | 100 | 07:32:00 | Chris | | 101 | 05:00:00 | David | | 102 | 06:10:20 | Mike | | 103 | 12:30:45 | Carol | ← อัปเดตแล้ว +--------+------------------+----------+ 4 rows in set (0.00 sec)
ทำไมต้อง ORDER BY ... LIMIT 1?
- หากมีหลายแถวของ User เดียวกัน (Login หลายครั้ง)
WHERE UserName='Carol'จะเจอหลายแถว ORDER BY UserId DESC LIMIT 1รับประกันอัปเดตแถวล่าสุด (UserId สูงสุด) เพียง 1 แถว- ป้องกันการอัปเดตผิดแถวหรืออัปเดตหลายแถวพร้อมกัน
รูปแบบ UPDATE ... ORDER BY ... LIMIT
| รูปแบบ | ใช้เมื่อ |
|---|---|
| UPDATE ... WHERE ... ORDER BY id DESC LIMIT 1 | อัปเดตแถวล่าสุดของเงื่อนไข |
| UPDATE ... WHERE ... ORDER BY id ASC LIMIT 1 | อัปเดตแถวแรกของเงื่อนไข |
| UPDATE ... WHERE ... ORDER BY timestamp DESC LIMIT 1 | อัปเดตแถวเวลาล่าสุด |
สรุป: ใช้ UPDATE ... WHERE condition ORDER BY sort_col DESC LIMIT 1 เพื่ออัปเดตแถวเดียวที่ตรงเงื่อนไขและเป็นล่าสุด (หรือเก่าสุด) อย่างแม่นยำ