ใช้ ORDER BY ... DESC LIMIT 1 เพื่ออัปเดตแถวที่มี ID สูงสุดซึ่งตรงเงื่อนไข
ไวยากรณ์
UPDATE yourTableName SET yourColumnName1 = yourValue WHERE yourColumnName2 = yourValue ORDER BY yourIdColumnName DESC LIMIT 1;
สร้างตารางตัวอย่าง
mysql> CREATE TABLE UpdateWithHighestDemo (
-> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserStatus TINYINT,
-> UserRank INT
-> );
เพิ่มข้อมูลตัวอย่าง
mysql> INSERT INTO UpdateWithHighestDemo(UserStatus,UserRank) VALUES (1,78), (0,118), (1,223), (1,225), (0,227), (0,230);
แสดงข้อมูลก่อน
mysql> SELECT * FROM UpdateWithHighestDemo;
ผลลัพธ์:
+--------+------------+----------+ | UserId | UserStatus | UserRank | +--------+------------+----------+ | 1 | 1 | 78 | | 2 | 0 | 118 | | 3 | 1 | 223 | | 4 | 1 | 225 | | 5 | 0 | 227 | | 6 | 0 | 230 | +--------+------------+----------+
กรณีที่ 1: อัปเดต UserStatus=1 WHERE UserRank=230 (ID สูงสุดที่ตรงเงื่อนไข)
mysql> UPDATE UpdateWithHighestDemo
-> SET UserStatus = 1
-> WHERE UserRank = 230
-> ORDER BY UserId DESC
-> LIMIT 1;
Query OK, 1 row affected (0.19 sec)
ผลลัพธ์: UserId=6 เปลี่ยนจาก 0 เป็น 1
กรณีที่ 2: อัปเดตแถวที่ ID สูงสุดโดยรวม (ไม่มี WHERE)
mysql> UPDATE UpdateWithHighestDemo
-> SET UserStatus = 0
-> ORDER BY UserId DESC
-> LIMIT 1;
Query OK, 1 row affected (0.18 sec)
ผลลัพธ์: UserId=6 เปลี่ยนจาก 1 เป็น 0
คำอธิบาย
ORDER BY UserId DESC LIMIT 1เลือกแถวที่มี ID มากที่สุด (ล่าสุด)- ร่วมกับ
WHEREจะเลือก ID สูงสุด ในกลุ่มที่ตรงเงื่อนไข - เหมาะสำหรับ: อัปเดตสถานะล่าสุด, ยกเลิกออเดอร์ล่าสุด, แก้ไขล็อกล่าสุด
ข้อจำกัด
- ไม่สามารถใช้
ORDER BYกับLIMITในDELETEได้ใน MySQL บางรุ่น (ต้องใช้ subquery) - ต้องมี index บนคอลัมน์ ORDER BY เพื่อประสิทธิภาพ