日期:2014-05-18  浏览次数:20907 次

sql先分组后按时间排序
实在搞不定了,发帖问下。

我在做一个评论系统,评论分一级、二级,所有评论都在同一张表——Comment。这是数据结构,很简单的,一看就懂。




现在我想通过一条sql查出某篇文章下所有评论,就差排序没做好了,望高手指教~~

最终需要的结果:

1、先根据一级评论按时间正序(asc)排列,即 articleId 有值的。
2、再把一级评论对应的二级评论排到父级评论后,而且还要按时间正序排列。


在上面截图中,已经按时间排序了,这样不对,还要把commentId相同的结果放到一起

------解决方案--------------------
看不明白
------解决方案--------------------
order by commentid+convert(varchar(19),commenttime,120)
------解决方案--------------------
try
SQL code
order by
  isnull(commentId,id),
  commentId,
  commenttime

------解决方案--------------------
躺地上学习中……
------解决方案--------------------
探讨
想起一件事,我数据里的 null 是字符串 “null”,这样貌似不能用 isnull 方法吧

------解决方案--------------------
结果集合 = query( select * from Comment order by asc );
replyData // 回复评论数据变量
commentData // 评论数据变量
foreach( 结果集合 as 每条记录 )
{
if( 每条记录['arcticleId'] == NULL )
{
replyData[每条记录['commentId']] = 每条记录; // 用arcticleId作为索引
}
else
{
commentData[] = 每条记录;
}
}

那么显示的时候
foreach( commentData as comment )
{
输出 comment; // 一级评论
if ( 存在( replyData[comment['arcticleId']] ) )
{
foreach( replyData[comment['arcticleId']] as reply )
{
输出 reply; // 二级评论
}
}
}

这个方法只针对二级的情况

还有你的ID用不用搞那么长啊…貌似不太利于查询效率,二级评论最好也填上arcticleId(个人觉得)
------解决方案--------------------
没看明白明目意思