posts - 0,  comments - 5,  trackbacks - 0
今天遇到一个问题,文章评论回复,由于评论和回复是二个不同的表,现在要根据回复时间来排序,而回复表的记录可能存在可能不存在.

SELECT  * from Sys_Article_Remark  sar left join `Sys_Remark_Reply` rr on sar.`id`=rr.`remarkId` where sar.`articleId`=18273  order by rr.`replyTime` desc 肯定不行..它会把所有的记录都查寻出来,我们的评论表不能出现重复.

用SELECT  distinct *  from Sys_Article_Remark  sar left join `Sys_Remark_Reply` rr on sar.`id`=rr.`remarkId` where sar.`articleId`=18273  order by rr.`replyTime` desc和上面一样的效果.

用SELECT *  from Sys_Article_Remark  sar left join `Sys_Remark_Reply` rr on sar.`id`=rr.`remarkId` where sar.`articleId`=18273  group by rr.`remarkId` order by rr.`replyTime` desc 根据articleId分组也不行..因为它会把回复表中不存的记录,所有null记录当成是一组..对distinct来说.所有null也是相同的.

最后用SELECT *  from Sys_Article_Remark  sar left join `Sys_Remark_Reply` rr on sar.`id`=rr.`remarkId` where sar.`articleId`=18273 group by sar.id order by rr.`replyTime` desc ..根据评论id来分组.就不会出现评论重复了.

distinct 表示不出现重复的列,group by表示按列分组.这二个的性能问题还没认真看过.不过自己感觉group by 比 distinct 更好用.因为distinct只对单个字段有用.如果查询多个就不行了.

如 数据表test 中的记录 主键 id 值 name

假设有 1,a 2,b 3,c 4,b 5,c 这五条记录.如果你只想查出a b c 用 select distinct name from test 可以做到.结果为 name a b c .如果你想把name 对应的id也查出来 用 select id,distinct name from test  这时distinct 就没有用了.因为id没有重复.所以它会把所有记录都显示出来.

现在最好用group by

select * from test group by name 这样就强制只显示3条记录了…

posted on 2007-12-05 10:45 crazy 阅读(960) 评论(1)  编辑  收藏 所属分类: mysql数据库

只有注册用户登录后才能发表评论。


网站导航: