GORAGOD.com

เทคนิคการตรวจสอบวันหมดอายุ

หลายๆคนชอบหาวิธีการจัดการกับวันหมดอายุ ด้วยการไปกำหนค่า วันหมดอายุในฐานข้อมูลกัน เช่น เมื่อหมดอายุแล้ว ให้มีการกำหนดค่าลงใน db ให้ expired=1 เป็นต้น และเวลา query ก็จะใช้
SELECT ...... WHERE expired=0 .....

ในการ query รายการที่ยังไม่หมดอายุ เช่น การตรวจสอบในตอน login ซึ่งการที่จะต้องคอยเปลี่ยนแปลงสถานะในฐานข้อมูลก็เป็นความลำบากอย่างหนึ่งว่าจะต้องมาคอยหาว่า จะเปลี่ยนตอนไหนและด้วยวิธีใด ผมมีวิธีที่ง่ายกว่ามาเสนอ

จริงๆแล้วเราต้องตรวจสอบ วันหมดอายุ ในตอน query ทุกครั้งอยู่แล้ว ดังนั้น เราก็ไม่จำเป็นต้องมีการตรวจสอบล่วงหน้าเพื่อคอยปรับสถานะหรือตรวจสอบซ้ำอีก เราสามารถใช้เทคนิคการตรวจสอบในขณะ query ได้เลยครับ (ซึ่งเป็นสิ่งที่ต้องทำอยู่แล้ว เช่น expired=0)
SELECT ...... WHERE NOW()<=expired_date .....

ตัวอย่างด้านบน เป็นการตรวจสอบที่วันหมดอายุโดยตรง คือ "วันนี้น้อยกว่าหรือเท่ากับวันหมดอายุ" ซึ่งก็หมายถึงยังไม่หมดอายุนั่นเอง
ข้อดีของวิธีด้านบนคือ ไม่ต้องมาคอยเขียนตำสั่งเพื่อตรวจสอบวันหมดอายุ ซึ่งอาจต้องพึ่ง ครอน และ หากจะแก้ไขวันหมดอายุก็ทำได้ง่ายๆ แค่เปลี่ยนวันที่เท่านั้น

หมายเหตุ คำสั่งด้านบน expired_date เก็บข้อมูลในรูป date หรือ datetime นะครับ โดยที่คำสั่ง NOW() จะคืนค่าวันที่และเวลาปัจจุบันมาให้ แต่โดยส่วนใหญ่แล้ว ผมมักจะเก็บวันที่ในรูป mktime มากกว่า (เก็บเป็นตัวเลข) เนื่องจากจะทำให้คำนวณวันคงเหลือได้ง่ายกว่า