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

MySQL UPDATE WHERE ID สูงสุด AND เงื่อนไขฟิลด์ตรงกับตัวแปร

ใช้ 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 เพื่อประสิทธิภาพ