主题:  怎样实现这样的sql查询?

aSir

职务:普通成员
等级:1
金币:0.0
发贴:78
注册:2002/4/8 23:07:54
#12002/5/11 22:40:55
有一个新闻系统,一张news表,一张pinglun(评论)表,以新闻ID建立关系,并都有updatetime日期型字段,现在要在一页中把两表中的最新发表的n篇取出,并一起按两者的加入日期排序。也就是形成这样的表格:
最新新闻: id 新闻标题 加入时间2002-5-11
最新新闻: id 新闻标题 加入时间2002-5-10
最新评论: id 评论标题 加入时间2002-5-9
最新新闻: id 新闻标题 加入时间2002-5-8
最新评论: id 评论标题 加入时间2002-5-7
还有第一列新闻和评论是怎样判断出来(来自news表则为新闻,来自pinglun表为评论)?

急待回答,谢



5D荣誉斑竹

职务:普通成员
等级:2
金币:10.0
发贴:710
注册:2001/10/24 18:34:42
#22002/5/12 0:19:40
不太明白你的意思,如果是连接两个表的话应该用以下SQL:

select TOP n *
from news INNER JOIN pinglun ON news.id=pinglun.id
order by updatetiem desc



aSir

职务:普通成员
等级:1
金币:0.0
发贴:78
注册:2002/4/8 23:07:54
#32002/5/12 0:32:18
updatetime 两个表中都有,数据不同,可以这样用吗?

order by updatetiem desc 中的updatetime是指两个表中的吗?

这样的数据库结构是因为新闻表的字段较多,每条新闻又对应多条评论,如果做成一个表,评论记录中许多字段用不上,对数据库的空间是很大的浪费,所以用两表,以新闻ID关联,但在处理这个问题上遇到了麻烦



5D荣誉斑竹

职务:普通成员
等级:2
金币:10.0
发贴:710
注册:2001/10/24 18:34:42
#42002/5/13 0:12:56
如果你想显示新闻的话,就要用新闻表里的updatetime,用法如:order by news.updatetiem desc

SQL如下:
select TOP n *
from news INNER JOIN pinglun ON news.id=pinglun.id
order by news.updatetiem desc

这个做法是正确的,把数据表尽量的分开,这是符合数据库设计范式的。在你的显示问题上,怎么个写SQL就看你的具体情况啦,如果只是在显示详细新闻内容的同时把相关的评论显示出来,那么甚至不用连接2个表,直接通过传递一个参数(如:ID),分别建立2个记录集就好了(一般建议这么做,这样的话你的记录不会太庞大,速度当然也能保证啦)



aSir

职务:普通成员
等级:1
金币:0.0
发贴:78
注册:2002/4/8 23:07:54
#52002/5/13 11:59:50
已经搞好,大家共享吧
SELECT TOP 10 *
FROM (SELECT newsid, newstitle as title, newsupdatetime as updatetime, 'news' AS type
FROM news
UNION
SELECT newsid, pingluntitle as title, pinglunupdatetime as updatime, 'pinglun' FROM pinglun) ORDER BY updatetime desc


在sql server和access2000下都已经测试通过



udfans

职务:普通成员
等级:2
金币:0.0
发贴:417
注册:2002/2/2 12:32:55
#62002/5/15 16:19:59
你可用数据库的查询来轻松解决这个问题,不过用之前一定人设置好表间的关联!