网站项目中,不同的功能会存在不同的数据库表中, 如,博客文章表,论坛贴子表,心情说说表,图片分享表,数据表的结构也是各不相同的!现在要实现这样的一个功能, 要查出这些表最新的十几前数据按时间综合在一起显示!!像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“
这个是问题吗?
1、你写好几个表的Select 语句,把字段名称改成相同的,比如Title, CreateTime
然后把这些记录全部放在一个LIST里面,对LIST里面的CreateTime进行排序,再显示。
这样的话显示效果就是按照时间,但不按照类型排序的。
如果你要问的是怎么按时间排序查询数据,这个应该不太可能吧? Select Top 10 * from table1 order by createtime desc
如果你要问的是性能问题,...
问题就在于不知道你想问啥,你不至于要在这儿讨论怎么建设一个腾讯网站吧。
其实多表数据合并显示同一页这功能,在很多的综合性网站都有!像天涯, 猫扑等, 不单是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里面, 然后依据类型字段去查去相就表的数据,合并后显示出来, 但是考虑到性能的问题,没这么用。所以希望各位高手讨论一下,该怎么设计现在高效一点!!
@梦愿:
你这个愿望呢,我可以想象,但在等你说出来。
很多人问问题都象你这样,没有说出自己真正的需求。
楼下的方法是一个方法。把UNION改为UNION ALL就行了。
不过你如果去看下DISCUZ之类的,通常采用的解决方案是,用一个表存储相同的字段,
比如所有的信息类数据表保存在一个表中,用一个字段表示类型,一个字段可以是Title,
一个字段是CreateTime,这样就不需要采用UNION的方式,而只需要一个Select语句就可以解决。
UNION语句的性能是相对较差的。
至于采用什么样的解决方案最终还是看你的需求及应用的场景。
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
可以多条SQL UNION,也可以多次查询放在一个数据集里再用LINQ来查