Sign-up....

这个SQL怎么写?帮忙看看

留言表结构

id 留言时间 留言内容 父ID 留言时间

相关说明:

父ID默认为0

如果不为0,而为I,那么该天记录就是对id为I的留言就行回复。

现在我想根据回复的时间顺序对留言进行查询出来结果。请问这样的SQL怎么写?

[116 byte] By [msdn] at [2007-8-14 21:54:35]
# 1 Re: 这个SQL怎么写?帮忙看看

不是很明白你要查询什么,最好有个例子

sh_zll at 2005-4-22 14:53:21 >
# 2 Re: 这个SQL怎么写?帮忙看看

我是菜鸟,来学习

shan1119 at 2005-4-22 15:27:23 >
# 3 Re: 这个SQL怎么写?帮忙看看

没人知道吗?

xqi8 at 2005-4-22 17:35:37 >
# 4 Re: 这个SQL怎么写?帮忙看看

不是没人知道,是你的表述不是很清楚。

最好能贴出一些示例数据,加上你想要的结果。

paoluo at 2005-4-22 17:40:08 >
# 5 Re: 这个SQL怎么写?帮忙看看

是不是想查处给id为I的所有留言,按时间排序:

注意:一张表不能有两个一样的字段“留言时间”

zxy98 at 2005-4-22 17:47:43 >
# 6 Re: 这个SQL怎么写?帮忙看看

SELECT 留言内容

FROM 留言表

WHERE 父ID=1

ORDER BY 回复时间 DESC

chengqiu_123 at 2005-4-22 17:57:27 >
# 7 Re: 这个SQL怎么写?帮忙看看

后面那个应该是回复时间吧~我这样认为的

chengqiu_123 at 2005-4-22 17:58:18 >
# 8 Re: 这个SQL怎么写?帮忙看看

select 留言表.id,ISNULL(中间表.最后留言时间,留言表.留言时间) as 最后时间,留言表.留言内容

from 留言表 left outer join

(select 父id,max(留言时间) as 最后留言时间 from 留言表 group by 父id) 中间表 on 留言表.id=中间表.父ID where 留言表.id=0

dreamover at 2005-4-22 19:09:21 >
# 9 Re: 这个SQL怎么写?帮忙看看

忘了排序了

select * from

(select 留言表.id,ISNULL(中间表.最后留言时间,留言表.留言时间) as 最后时间,留言表.留言内容

from 留言表 left outer join

(select 父id,max(留言时间) as 最后留言时间 from 留言表 group by 父id) 中间表 on 留言表.id=中间表.父ID where 留言表.id=0)

) 中间表2

order by 中间表2.最后时间 desc

未测试,你自己试试好不好使吧

dreamover at 2005-4-22 19:11:55 >
# 10 Re: 这个SQL怎么写?帮忙看看

http://www.xinxi168.com/Paste.asp

xinxilipingyuan at 2005-4-22 19:14:38 >
# 11 Re: 这个SQL怎么写?帮忙看看

SELECT *

FROM 留言表

WHERE 父ID<>0

ORDER BY 留言时间 DESC

UNION

SELECT *

FROM 留言表

WHERE 父ID=0

ORDER BY 留言时间 DESC

chengqiu_123 at 2005-5-12 12:28:26 >
# 12 Re: 这个SQL怎么写?帮忙看看

没有那么复杂的,这样就可以的

Select * from 留言表 A Where id=0

Order By (Case When Exists(Select * from 留言表 Where 父ID=A.id) Then 0 Else 1 End),留言时间

paoluo at 2005-5-12 12:42:17 >
# 13 Re: 这个SQL怎么写?帮忙看看

Select * from 留言表 A Where id=0

Order By (Case When Exists(Select * from 留言表 Where 父ID=A.id) Then 0 Else 1 End),留言时间

tdtjjiao at 2005-5-12 13:49:10 >
# 14 Re: 这个SQL怎么写?帮忙看看

回复人: paoluo(一天到晚游泳的鱼) ( ) 信誉:100

没有那么复杂的,这样就可以的

Select * from 留言表 A Where id=0

Order By (Case When Exists(Select * from 留言表 Where 父ID=A.id) Then 0 Else 1 End),留言时间

-------

这贴楼主早就没影了

你写的这个只能判断有没有回复,而没判断最后回复时间

dreamover at 2005-5-14 9:30:47 >
# 15 Re: 这个SQL怎么写?帮忙看看

楼上的,楼主这么说的,“现在我想得到最新有回复的留言。如果没有留言就排到最后。”

他只是要得到有回复的留言,有回复的排在前面,没有回复的排在后面。

paoluo at 2005-5-14 9:44:06 >
# 16 Re: 这个SQL怎么写?帮忙看看

“现在我想得到最新有回复的留言。如果没有留言就排到最后。”

那不是“最新有回复的留言”,“最新有”这三个字,我理解还要求有回复时间最新的意思,不是么?

而且一般论坛上也是有最新回复的一般都会把贴顶上去,所以我想应该是这个要求

dreamover at 2005-5-14 11:56:34 >
# 17 Re: 这个SQL怎么写?帮忙看看

select id 留言时间 留言内容 父ID 留言时间

from 留言表

where 父ID=I

order by 留言时间;

如果是id=I就回复的话那么where处改为

where id=I

sitanda at 2005-5-14 17:25:17 >

MS-SQL Server

All Classified