มีตั้งเป้าไว้ว่า จะเขียน blog เพิ่มทุกสัปดาห์ ( ที่ชอบใช้คำว่าอาทิตย์นั้นละ ) ที่จะทำทุก ๆ วันเสาร์ทุก ๆ ในแต่อาทิตย์ โดยที่บางครั้งก็ไม่ได้ทำไปเหมือนกัน ก็จะทำชดเชยย้อนหลัง แต่ปัญหาก็คือ เสาร์ไหนละ ที่ไม่ได้เขียน หรือวันไหนที่เขียนนอกวันเสาร์ วิธีนี้จะง่ายขึ้นถ้ามีวันที่ วันเสาร์ ทุก ๆ วันในตารางให้ query ก็จะง่ายมาก แต่ไม่มี ก็หาวิธี query จาก SQL ดู ถ้า recursive ขึ้นมาได้มันก็ง่ายเลย
1 2 3 4 5 6 7 8 9 10 11 | WITH RECURSIVE DateSeries AS ( SELECT DATE ( '2010-01-01' ) AS dt UNION ALL SELECT dt + INTERVAL 1 DAY FROM DateSeries WHERE dt <= CURDATE() ) SELECT dt FROM DateSeries WHERE DAYOFWEEK(dt) = 7 ORDER BY dt; |
อธิบาย
- บรรทัด 1 – 7 มันเหมือนกับการเขียน program recursive function ที่จะเรียกตัวเองไปเรื่อย ๆ ตั้งแต่วันที่ 1 มกราคม 2010 จนหยุดเมื่อวันที่น้อยกว่าหรือเท่ากับปัจจุบันไว้ ใน temporary result DateSeries
- เอามา select ซ้ำอีกรอบ ตรงนี้ query ที่จะใช้จริง ๆ อาจจะต้องเอามาดัดแปลงอีกทีตามตารางที่เราเก็บข้อมูลไว้ จะ left join, right join, union join ก็แล้วแต่ความต้องการใช้
- บรรทัด 10 คือเงื่อนไขวันที่เราต้องการค้นหา
อ่านเพิ่มเติม
About the author