首页 新闻 会员 周边

网站多个数据表里的内容按时间顺序同一页面显示的问题!

0
悬赏园豆:20 [已解决问题] 解决于 2014-01-26 21:44

网站项目中,不同的功能会存在不同的数据库表中, 如,博客文章表,论坛贴子表,心情说说表,图片分享表,数据表的结构也是各不相同的!现在要实现这样的一个功能, 要查出这些表最新的十几前数据按时间综合在一起显示!!像QQ空间里的“全部”那一栏!怎么把好几个表的数据按时间查询出来呢??!求讨论!

问题补充:

便于对这个问题的理解,我假设一下:

表1

id..title.. summay.....time

1                      20140101

2                      20140105

3                      20140108

........

表2

id ..col1....time 

1              20140105

2              20140106

3              20140109

表3

id ... row....  time 

1                20140103

2                20140106

3                20140110

 

现在共要这三个表中的根据时间的先后前5个数据,也就是

表3-----“3“,表2---”3“,表1----”3“,表2----”2“,表3---”2“

 

 

 

 

梦愿的主页 梦愿 | 初学一级 | 园豆:165
提问于:2014-01-19 09:38
< >
分享
最佳答案
1

这个是问题吗?

1、你写好几个表的Select 语句,把字段名称改成相同的,比如Title, CreateTime

然后把这些记录全部放在一个LIST里面,对LIST里面的CreateTime进行排序,再显示。

这样的话显示效果就是按照时间,但不按照类型排序的。

如果你要问的是怎么按时间排序查询数据,这个应该不太可能吧? Select Top 10 * from table1 order by createtime desc

如果你要问的是性能问题,...

问题就在于不知道你想问啥,你不至于要在这儿讨论怎么建设一个腾讯网站吧。

收获园豆:15
爱编程的大叔 | 高人七级 |园豆:30839 | 2014-01-19 10:44

其实多表数据合并显示同一页这功能,在很多的综合性网站都有!像天涯, 猫扑等, 不单是QQ空间!

我曾想过,你1、中的方法, 但是那样子每张表中取前10个数据,假如是三个表的话就是30个数据,统一放到一个LIST里面,再按时间排序!要是其中比如表1 20140119有30个数据,表2,表3中, 表2,表3中20140119没有数据,如此一样,第一页的30个数据有表1 中20140119的数据10个, 表2,表3中的20140119后的各10个数据,进行翻页后,第二页,还是表1中20140119这一样的10个数据, 表2、表3的是之后的数据,这样达不到最新的先显示! 

后来我想,进一个 全站索引表,设一类型字段 如1代表表1,2代表表2, 把最新的数据先查出来放一个list里面, 然后依据类型字段去查去相就表的数据,合并后显示出来, 但是考虑到性能的问题,没这么用。所以希望各位高手讨论一下,该怎么设计现在高效一点!!

梦愿 | 园豆:165 (初学一级) | 2014-01-19 17:59

@梦愿: 

你这个愿望呢,我可以想象,但在等你说出来。

很多人问问题都象你这样,没有说出自己真正的需求。

楼下的方法是一个方法。把UNION改为UNION ALL就行了。

不过你如果去看下DISCUZ之类的,通常采用的解决方案是,用一个表存储相同的字段,

比如所有的信息类数据表保存在一个表中,用一个字段表示类型,一个字段可以是Title,

一个字段是CreateTime,这样就不需要采用UNION的方式,而只需要一个Select语句就可以解决。

UNION语句的性能是相对较差的。

至于采用什么样的解决方案最终还是看你的需求及应用的场景。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-01-19 23:22
其他回答(2)
1
SELECT TOP 5
        *
FROM    ( SELECT TOP 5
                    ID ,
                    Title ,
                    Time
          FROM      表1
          UNION
          SELECT TOP 5
                    ID ,
                    col1 Title ,
                    Time
          FROM      表2
          UNION
          SELECT TOP 5                    
    ID ,
                 row   Title ,
                    Time
          FROM      表3
        ) A
ORDER BY A.Time DESC
收获园豆:4
I,Robot | 园豆:9783 (大侠五级) | 2014-01-19 22:11
0

可以多条SQL UNION,也可以多次查询放在一个数据集里再用LINQ来查

收获园豆:1
梵哥 | 园豆:344 (菜鸟二级) | 2014-01-20 22:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册