sql先分组后按时间排序解决方案
sql先分组后按时间排序实在搞不定了,发帖问下。我在做一个评论系统,评论分一级、二级,所有评论都在同一张表—
sql先分组后按时间排序
实在搞不定了,发帖问下。
我在做一个评论系统,评论分一级、二级,所有评论都在同一张表——Comment。这是数据结构,很简单的,一看就懂。
现在我想通过一条sql查出某篇文章下所有评论,就差排序没做好了,望高手指教~~
最终需要的结果:
1、先根据一级评论按时间正序(asc)排列,即 articleId 有值的。
2、再把一级评论对应的二级评论排到父级评论后,而且还要按时间正序排列。
在上面截图中,已经按时间排序了,这样不对,还要把commentId相同的结果放到一起
[解决办法]
看不明白
[解决办法]
order by commentid+convert(varchar(19),commenttime,120)
[解决办法]
try
SQL codeorder by isnull(commentId,id), commentId, commenttime
[解决办法]
躺地上学习中……
[解决办法]
[解决办法]
结果集合 = 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(个人觉得)
[解决办法]
没看明白明目意思