สวัสดีครับ สำหรับบทเรียนรู้นี้เป็นการสร้าง view ใน MySQL เพื่อหาว่าโพสล่าสุด (thread) และโพสที่มีคนตอบล่าสุด (post) ให้สามารถเรียงลำดับได้ เช่นให้โพสล่าสุด และโพสที่มีการตอบอยู่ด้านบน (โพสที่มีความเคลื่อนไหวล่าสุด นั่นเอง)
ข้อจำกัดของการสร้าง view คือ เราไม่สามารถสร้าง view แบบมี subquery ได้
คำสั่งในการสร้าง view คือ
CREATE VIEW AS
..SQL STATEMENT...
ขั้นแรก สร้าง view เลือกการตอบล่าสุด
สำหรับการตอบกระทู้นั้นจะตอบได้หลายครั้ง ดังนั้นเราจะต้องทำการ group by thread_id ด้วย
CREATE VIEW AS
SELECT q_post.thread_id AS thread_id
,MAX(q_post.updated_at) AS latest_timestamp
,q_post.author_id AS author_id
FROM q_post
GROUP BY q_post.thread_id
จะได้รายการกระทู้ที่มีการตอบล่าสุด
ขั้นที่สอง สร้าง view สำหรับการตั้งกระทู้หรือตอบกระทู้ล่าสุด
ในขั้นตอนนี้จะต้องนำ timestamp ของ q_post หรือการตอบล่าสุดมาเปรียบเทียบกับ q_thread หรือการตั้งกระทู้ล่าสุด ว่าอันไหนมาก่อนหลัง จากนั้นค่อยเลือกมา
CREATE VIEW AS
SELECT q_thread.id AS id
,q_thread.subject AS subject
,q_thread.tags AS tags
,q_thread.created_at AS created_at
,q_thread.updated_at AS updated_at
,q_thread.view_count AS view_count
,q_thread.user_id AS user_id
,latest_posts.latest_timestamp AS latest_timestamp
,latest_posts.author_id AS author_id
,GREATEST(q_thread.updated_at,COALESCE(latest_posts.latest_timestamp,q_thread.updated_at)) AS sorting
FROM(q_thread LEFT JOIN q_latest_post latest_posts ON((q_thread.id = latest_posts.thread_id))) ORDER BY GREATEST(q_thread.updated_at,coalesce(latest_posts.latest_timestamp,q_thread.updated_at)) DESC
จะได้รายการกระทู้ที่ต้องการแล้ว
ครับจากนั้นก็สามารถ query ข้อมูลไปใช้ได้เหมือนตารางปกติครับ ซึ่งหัวใจสำคัญอยู่ที่ sorting ครับ โดยจะเลือก timestamp ที่มีความเคลื่อนไหวล่าสุดมา เราจึงสามารถนำไป sort ได้ครับ
ความคิดเห็น