有三个表 一个site表 一个 customer 表 一个SiteHistory表 主健分别是 iSiteID, iCustomerID, iSiteID 和datTimeStamp site表中记录的信息是不同的站点名称
siteHistory中记录的是每当site表中某个站点设置更新就写一条新纪录,更新datTimeStamp为当前时间
比如site 表中有 a,b,c三个站点的信息, 当把b更新名字成d的时候 site表中仍然是三条纪录a,c,d但是siteHistory中就会有四条记录a,b,c,d
现在要做的是 当在网页上查找纪录是 dropdownlist中显示的是所有的站点名称从siteHistory表中得到a,b,c,d 如果customer 表中有 3个用户属于b站点
在b站点改名字成d站点后又注册了2个新用户
要求是 当选择b站点查找的时候只显示前三个用户 但是当用d站点查找的时候显示全部5个人 如果什么站点都不选现实全部的用户的时候 显示5个用户但是结果中的站点名称要求 前三个人显示 b(d) 后两个人显示(d) 如果需要可以在siteHistory表中增加column纪录某站点什么时候被remove换成新的站点了 哪位大侠帮忙看看
siteHistory中记录的是每当site表中某个站点设置更新就写一条新纪录,更新datTimeStamp为当前时间
比如site 表中有 a,b,c三个站点的信息, 当把b更新名字成d的时候 site表中仍然是三条纪录a,c,d但是siteHistory中就会有四条记录a,b,c,d
现在要做的是 当在网页上查找纪录是 dropdownlist中显示的是所有的站点名称从siteHistory表中得到a,b,c,d 如果customer 表中有 3个用户属于b站点
在b站点改名字成d站点后又注册了2个新用户
要求是 当选择b站点查找的时候只显示前三个用户 但是当用d站点查找的时候显示全部5个人 如果什么站点都不选现实全部的用户的时候 显示5个用户但是结果中的站点名称要求 前三个人显示 b(d) 后两个人显示(d) 如果需要可以在siteHistory表中增加column纪录某站点什么时候被remove换成新的站点了 哪位大侠帮忙看看
customer 表应该有注册时间:logindattimestamp
sitehistory表中有:name
2.建一个函数:返回通过ID和时间获取名称的函数。
create function get_name(@id int,@time)
returns varchar(20)
as
begin
declare @n varchar(20)
select top 1 @name =name from sitehistory where isiteid = @id and dattimestamp <=@time order by dattimestamp desc
return @name
end
3.这样你就可以通过时间和ID获取name了,后面的就不用说了吧
假设有三个表他们之间通过FK关联 Site表 SiteHistory表 Customer表
我只介绍一下表中重要的column Site表中有 iSiteID, iSiteName, iSiteUrl,datCreateTime(创建时间)
SiteHistory结构和Site完全一样 只不过多了一个datTimeStamp的column用来记录每一次对site表的更新
Customer表中有 iCustomerID,iSiteID,datSignUpDate
具体关系是
iSiteID在Site表中是unique的用来做Primary Key
iSiteHistory表中iSiteID和datTimeStamp用来做Primary Key, 同一个iSiteID在此表中可能对应多个记录 \
iCustomerID在Customer表中是Unique的现在发生如下情况
一开始在没有引用SiteHistory表的情况下 当查询Customer的时候很容易通过iSiteID把Customer和Site表关联查询得到相关的结果
但是根据需要引入SiteHistory表后 需要得到以下查询
假设Site和SiteHistory表中原先有三个站点记录
iSiteID iSiteName iSiteUrl datCreateTime
1 a a.com 06/01/2006
2 b a.com 06/01/2007
3 c c.com 06/01/2008
iSiteID iSiteName iSiteUrl datCreateTime datTimeStamp
1 a a.com 06/01/2006 06/01/2006
2 b a.com 06/01/2007 06/01/2007
3 c c.com 06/01/2008 06/01/2008Customer表
iCustomerID iSiteID datSignUpDate
1 1 07/01/2006
2 2 07/01/2007
3 2 07/01/2007
4 2 07/01/2007
5 3 07/01/2008
如果对Site表中b更新名字成d那么SiteHistory表中会增加一条记录
2 d d.com 06/01/2008 08/01/2008在此后原来的b站点也就是现在d站点又注册了两个新用户现在Customer表如下
iCustomerID iSiteID datSignUpDate
1 1 07/01/2006
2 2 07/01/2007
3 2 07/01/2007
4 2 07/01/2007
5 3 07/01/2008
6 2 09/01/2008
7 2 09/01/2008
现在就有如下问题 假设在用户界面上有若干查询选择下拉列表框中显示SiteHistory中所有的不重复的站点(iSiteID可能相同)
用户选择b 需要显示的结果应该是
iCustomerID SiteName datSignUpDate
2 b 07/01/2007
3 b 07/01/2007
4 b 07/01/2007如果选择 d 需要显示的结果是 因为以前的三个用户仍然存在他们也属于新的站点
iCustomerID SiteName datSignUpDate
2 d 07/01/2007
3 d 07/01/2007
4 d 07/01/2007
6 d 09/01/2008
7 d 09/01/2008如果选择全部那么应该显示iCustomerID SiteName datSignUpDate
1 a 07/01/2006
2 d(b) 07/01/2007
3 d(b) 07/01/2007
4 d(b) 07/01/2007
5 c 07/01/2008
6 d 09/01/2008
7 d 09/01/2008
总的来说就是 显示结果的时候 选以前的显示以前的 选现在的显示现在的 选全部的话就用相关的名字区分出来我写的办法比较复杂逻辑性不好,所以想请大家帮忙看看有什么好办法
假设有三个表他们之间通过FK关联 Site表 SiteHistory表 Customer表
我只介绍一下表中重要的column Site表中有 iSiteID, iSiteName, iSiteUrl,datCreateTime(创建时间)
SiteHistory结构和Site完全一样 只不过多了一个datTimeStamp的column用来记录每一次对site表的更新
Customer表中有 iCustomerID,iSiteID,datSignUpDate
具体关系是
iSiteID在Site表中是unique的用来做Primary Key
iSiteHistory表中iSiteID和datTimeStamp用来做Primary Key, 同一个iSiteID在此表中可能对应多个记录 \
iCustomerID在Customer表中是Unique的 现在发生如下情况
一开始在没有引用SiteHistory表的情况下 当查询Customer的时候很容易通过iSiteID把Customer和Site表关联查询得到相关的结果
但是根据需要引入SiteHistory表后 需要得到以下查询
假设Site和SiteHistory表中原先有三个站点记录
iSiteID iSiteName iSiteUrl datCreateTime
1 a a.com 06/01/2006
2 b a.com 06/01/2007
3 c c.com 06/01/2008
iSiteID iSiteName iSiteUrl datCreateTime datTimeStamp
1 a a.com 06/01/2006 06/01/2006
2 b a.com 06/01/2007 06/01/2007
3 c c.com 06/01/2008 06/01/2008 Customer表
iCustomerID iSiteID datSignUpDate
1 1 07/01/2006
2 2 07/01/2007
3 2 07/01/2007
4 2 07/01/2007
5 3 07/01/2008
如果对Site表中b更新名字成d那么SiteHistory表中会增加一条记录
2 d d.com 06/01/2008 08/01/2008 在此后原来的b站点也就是现在d站点又注册了两个新用户现在Customer表如下
iCustomerID iSiteID datSignUpDate
1 1 07/01/2006
2 2 07/01/2007
3 2 07/01/2007
4 2 07/01/2007
5 3 07/01/2008
6 2 09/01/2008
7 2 09/01/2008
现在就有如下问题 假设在用户界面上有若干查询选择下拉列表框中显示SiteHistory中所有的不重复的站点(iSiteID可能相同)
用户选择b 需要显示的结果应该是
iCustomerID SiteName datSignUpDate
2 b 07/01/2007
3 b 07/01/2007
4 b 07/01/2007 如果选择 d 需要显示的结果是 因为以前的三个用户仍然存在他们也属于新的站点
iCustomerID SiteName datSignUpDate
2 d 07/01/2007
3 d 07/01/2007
4 d 07/01/2007
6 d 09/01/2008
7 d 09/01/2008 如果选择全部那么应该显示 iCustomerID SiteName datSignUpDate
1 a 07/01/2006
2 d(b) 07/01/2007
3 d(b) 07/01/2007
4 d(b) 07/01/2007
5 c 07/01/2008
6 d 09/01/2008
7 d 09/01/2008
总的来说就是 显示结果的时候 选以前的显示以前的 选现在的显示现在的 选全部的话就用相关的名字区分出来 我写的办法比较复杂逻辑性不好,所以想请大家帮忙看看有什么好办法