Giúp đỡ cập nhật dữ liệu mysql

Tôi có bảng CSDL SQL xử lý văn bản gồm cột ngày nhận, cột hạn xử lý, cột ngày xử lý, và cột trạng thái xử lý ( quá hạn, còn hạn) làm sao để tự động cập nhật cột trạng thái xử lý khi nhập cột ngày nhận,và hạn xử lý còn cột ngày xử lý chưa xác định khi nào nhập vào. Tôi đang viết code ngôn ngữ PHP. Xin cảm ơn và mong các bạn chỉ giáo!

Bạn thử theo gợi ý sau:

làm sao để tự động cập nhật cột trạng thái xử lý

Trong phMyAdmin bạn thử làm như hình:

Selection_005

Khi INSERT dữ liệu với câu lệnh INSERT INTO “table của bạn” thì bạn đừng có đếm xỉa gì đến trường trangthai (không có nó xuất hiện trong câu SQL) thì giá trị mặc định “OK” sẽ được chèn vào. Khá giống trường id cho auto increase vậy, thì đây nó là chuỗi default khi tạo table.

Và đọc đoạn lằng ngoằng bên dưới:

Trạng thái mặc định là ta đặt default value là “OK”.

  • Ngày nhận: người dùng nhập vào, luôn kiểm tra để tối đa là ngày hiện tại, còn thì là quá khứ, không thể là ngày ở tương lai.
  • Hạn xử lý: một số nguyên chỉ N ngày hoặc cụ thể là một ngày (nhưng có lẽ số nguyên sẽ tiện hơn vì nó là có bảng để tra cứu nhập mặc định trước)
  • Ngày xử lý = ngày hiện tại của hệ thống khi người dùng thao tác, có hàm trong PHP để lấy ngày giờ hệ thống. Còn nếu bạn nhập liệu thủ công sau, thì đơn giản là nhập vào 1 chuỗi biểu diễn ngày.
  • Trạng thái mặc định khi tạo cơ sở dữ liệu ta đặt default value là “OK” chẳng hạn, hoặc 1, hoặc 0, hoặc gì đó có ý nghĩa đối với bạn.

Ta sẽ nhận thấy:

if (ngày nhận + hạn xử lý > ngày xử lý) {
   trạng thái = "OUT"; // hết hạn
}

Nếu bạn muốn cập nhật tình trạng quá hạn tự động thì ta phải có script chạy cron để cập nhật hoặc thử tìm hiểu trigger trong MySQL xem có không.

Còn về mặt lập trình thì sẽ tính toán khi biểu ghi được nạp lên, ví dụ người dùng sẽ mở lên để xử lý, dựa theo công thức tính toán đã đề cập ở trên.

Chú ý: gợi ý trên chỉ ổn khi ngày xử lý là người dùng đang ngồi trong ngày hiện tại trên máy, còn bạn nhập “tài liệu hồi cố” (tức đã cũ trước đây) thì phải điều chỉnh.

4 Likes

Cột trạng thái đó không nên có, vì đó là thuộc tính nội suy bị thuộc vào thuộc tinh hạn xử lý
Viết function trả về trạng thái, khi query thì gọi để lấy trạng thái

Nếu bạn vẫn thích thì tùy hệ quản trị cơ sở dữ liệu khác nhau, nếu nó có task schedule để chạy thì viết cho nó (mysql có thể là event scheduler) , hoặc không có thì phải viết script chạy trên hệ điều hành rồi dùng task schedule windows hoặc cron linux gọi script đó chạy hoặc một số ngôn ngữ có lib/framework có hỗ trợ task schedule

7 Likes

Cám ơn các bạn nhiều nhé!

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?