首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql先分组后按时间排序解决方案

2012-04-18 
sql先分组后按时间排序实在搞不定了,发帖问下。我在做一个评论系统,评论分一级、二级,所有评论都在同一张表—

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(个人觉得)
[解决办法]
没看明白明目意思

热点排行