SELECT topic_title ,topic_date ,topic_view ,member_name AS topic_by_name ,comment_date FROM tb_board_topic
INNER JOIN tb_member ON member_id=topic_by
LEFT OUTER JOIN tb_board_comment ON comment_topic=topic_id
ORDER BY board_comment_date DESC, board_topic_date DESC
แบบนี้จะเกิดปัญหาดังนี้ครับ
- เราจะได้ member_name ของ tb_board_comment ได้อย่างไร เพราะไม่สามารถ INNER JOIN tb_member ON member_id=comment_by อีกได้
- ข้อมูลที่ SELECT มานั้น ในกรณีมีจำนวน N topic มีจำนวน M comment จะได้จำนวนแถว ที่ query เท่ากับ N topic คูณ M comment
ซึ่งจริงๆต้องการแค่ N topic กับ 1 comment ล่าสุด
อาจแก้ปัญหาโดยใช้ GROUP BY เข้ามาช่วยเป็นแบบนี้
Code
SELECT topic_title ,topic_date ,topic_view ,member_name AS topic_by_name ,comment_date FROM tb_board_topic
INNER JOIN tb_member ON member_id=topic_by
LEFT OUTER JOIN tb_board_comment ON comment_topic=topic_id
GROUP BY topic_id
ORDER BY board_comment_date DESC, board_topic_date DESC
SELECT
topic_title,
topic_date,
topic_view,
member_name AS topic_by_name,
(SELECT member_name FROM tb_comment INNER JOIN tb_member ON member_id=comment_by WHERE comment_topic=topic_id ORDER BY comment_date DESC LIMIT 0,1) AS comment_by_name ,
(SELECT comment_date FROM tb_comment INNER JOIN tb_member ON member_id=comment_by WHERE comment_topic=topic_id ORDER BY comment_date DESC LIMIT 0,1) AS comment_date
FROM tb_topic
INNER JOIN tb_member ON topic_by=member_id
ORDER BY topic_date DESC
เท่าที่สังเกตคือ การ SELECT ซ้อน ตรง Field นั้น จะเลือกได้แค่ 1 Field ไม่สามารถเลือกมา 2 Field ในการ SELECT ได้
Code
SELECT member_name,comment_date FROM tb_comment INNER JOIN tb_member ON member_id=comment_by WHERE comment_topic=topic_id ORDER BY comment_date DESC LIMIT 0,1