在最近的一个项目使用遇到了一个查询的麻烦,按照最新评论显示文章,使用到了left join 和 group by开始的做法总是错误的,因为group by的位置放到了ORDER BY的后面,^_^
需求是这样滴,根据最新评论显示文章列表.
因为一篇文章有多个评论,所以,文章和评论分别放在了$TABLE[admin_blog]表和$TABLE[admin_blog_reply]表,admin_id是博客用户的id
开始查询语句是这样写滴
SELECT b.blog_id,b.blog_title,r.last_update_date FROM `$TABLE[admin_blog]` b LEFT JOIN `$TABLE[admin_blog_reply]` r ON(b.blog_id = r.blog_id) WHERE b.admin_id = '$admin_id' GROUP BY b.blog_id ORDER BY r.reply_blog_id DESC LIMIT 0,8
这样看起来是没有错,从文章表中查询文章,如果评论表中存在文章与评论的关联,结果却发生了意想不到的事情,文章列表出现重复文章,这是不好滴
修改了一下,基于评论查找,将评论表放在前面
SELECT b.blog_id,b.blog_title,r.last_update_date FROM `$TABLE[admin_blog_reply]` r LEFT JOIN `$TABLE[admin_blog]` b ON(b.blog_id = r.blog_id) WHERE b.admin_id = '$admin_id' GROUP BY b.blog_id ORDER BY r.reply_blog_id DESC LIMIT 0,8
这次终于正确了
另外一定要记住,GROUP BY 要放在ORDER BY 的前面