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

MySQL: UPDATE ตั้งค่า 1 ให้เรคคอร์ดที่วันหมดอายุก่อนวันนี้


คำอธิบาย

ใช้ 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();

รันอัตโนมัติทุกวัน ตรวจสอบและอัปเดตสถานะ