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

อัปเดตเวลา Login ของ User เฉพาะคนใน MySQL ด้วย ORDER BY LIMIT

ใช้ 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 เพื่ออัปเดตแถวเดียวที่ตรงเงื่อนไขและเป็นล่าสุด (หรือเก่าสุด) อย่างแม่นยำ