สร้าง View สำหรับแสดงกระทู้ล่าสุด และกระทู้ที่มีคนตอบล่าสุด

wave
มานพ กองอุ่น 12 เม.ย. 2017 11:08:09 4,249

สวัสดีครับ สำหรับบทเรียนรู้นี้เป็นการสร้าง 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 ได้ครับ


ความคิดเห็น

หากบทเรียนรู้มีความผิดพลาดประการใด หรือมีข้อเสนอแนะกรุณาแจ้ง contact@programmerthailand.com