ใช้ ORDER BY ... LIMIT ใน UPDATE เพื่อแก้ไขแถวสุดท้าย
MySQL รองรับ ORDER BY และ LIMIT ในคำสั่ง UPDATE ทำให้อัปเดตแถวที่มี ID สูงสุด (หรือเงื่อนไขอื่นๆ) ได้ในคำสั่งเดียวโดยไม่ต้อง Subquery
ตัวอย่างสร้างตารางและข้อมูล
CREATE TABLE DemoTable (ID INT, GameScore INT); INSERT INTO DemoTable VALUES (15, 848747), (13, 909049), (34, 98474646), (31, 948474);
ข้อมูลก่อนอัปเดต
+------+-----------+ | ID | GameScore | +------+-----------+ | 15 | 848747 | | 13 | 909049 | | 34 | 98474646 | | 31 | 948474 | +------+-----------+
คำสั่งอัปเดตแถว ID สูงสุด (34) เพิ่ม Score 10
UPDATE DemoTable SET GameScore = GameScore + 10 ORDER BY ID DESC LIMIT 1;
ข้อมูลหลังอัปเดต
+------+-----------+ | ID | GameScore | +------+-----------+ | 15 | 848747 | | 13 | 909049 | | 34 | 98474656 | | 31 | 948474 | +------+-----------+
คำอธิบาย:
ORDER BY ID DESCเรียง ID จากมากไปน้อย (34, 31, 15, 13)LIMIT 1จำกัดเฉพาะแถวแรกของผลลัพธ์ที่เรียงแล้ว (คือ ID=34)- รองรับใน
DELETEเช่นกัน:DELETE FROM DemoTable ORDER BY ID DESC LIMIT 1;
⚠ ข้อจำกัด:
- ไม่รองรับใน Standard SQL / Database อื่นๆ (PostgreSQL, SQL Server ใช้ Subquery/CTE)
- หากมี WHERE ให้วางก่อน ORDER BY:
UPDATE ... WHERE ... ORDER BY ... LIMIT ... - ไม่ควรใช้กับ Replication (Statement-based) เพราะลำดับอาจต่างกันบน Slave
วิธี Standard SQL (Subquery):
UPDATE DemoTable SET GameScore = GameScore + 10 WHERE ID = (SELECT MAX(ID) FROM DemoTable);