คำอธิบาย
ใช้ UPDATE ... SET ... WHERE ร่วมกับ CURDATE() เพื่อตั้งค่า Flag (ProductStatus=1) ให้ผลิตภัณฑ์ที่หมดอายุแล้ว (ก่อนหรือเท่ากับวันนี้)
ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง
สมมติวันนี้คือ 2019-08-20
mysql> create table DemoTable (
ProductStatus tinyint(1),
ProductExpiryDate date );
Query OK, 0 rows affected (1.03 sec)
การเพิ่มข้อมูล
mysql> insert into DemoTable values(0, '2019-06-12'); Query OK, 1 row affected (0.43 sec) mysql> insert into DemoTable values(0, '2019-10-11'); Query OK, 1 row affected (0.38 sec) mysql> insert into DemoTable values(0, '2018-07-24'); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable values(0, '2018-09-05'); Query OK, 1 row affected (0.27 sec)
แสดงข้อมูลก่อนอัปเดต
mysql> select * from DemoTable;
ผลลัพธ์:
+---------------+-------------------+ | ProductStatus | ProductExpiryDate | +---------------+-------------------+ | 0 | 2019-06-12 | | 0 | 2019-10-11 | | 0 | 2018-07-24 | | 0 | 2018-09-05 | +---------------+-------------------+ 4 rows in set (0.00 sec)
คิวรี่ UPDATE ตั้งค่า 1 สำหรับวันหมดอายุ ≤ วันนี้
mysql> update DemoTable set ProductStatus = 1 where ProductExpiryDate <= CURDATE(); Query OK, 3 rows affected (0.95 sec) Rows matched: 3 Changed: 3 Warnings: 0
ตรวจสอบข้อมูลหลังอัปเดต
mysql> select * from DemoTable;
ผลลัพธ์:
+---------------+-------------------+ | ProductStatus | ProductExpiryDate | +---------------+-------------------+ | 1 | 2019-06-12 | | 0 | 2019-10-11 | | 1 | 2018-07-24 | | 1 | 2018-09-05 |
คำอธิบาย
- 2019-06-12 ≤ 2019-08-20 → Status = 1 (หมดอายุแล้ว)
- 2019-10-11 > 2019-08-20 → Status = 0 (ยังไม่หมดอายุ)
- 2018-07-24, 2018-09-05 < 2019-08-20 → Status = 1
- 3 rows affected = อัปเดต 3 แถว
ประยุกต์ใช้: Cron Job / Event Scheduler
CREATE EVENT update_expiry_status ON SCHEDULE EVERY 1 DAY DO UPDATE DemoTable SET ProductStatus = 1 WHERE ProductExpiryDate <= CURDATE();
รันอัตโนมัติทุกวัน ตรวจสอบและอัปเดตสถานะ