想了一下还是发这里,多表查询问题

ltcszk 2010-05-05 11:50:36
3个表,a表和b表一对多,b表和c表一对多,a表和c表也有1对多的关系。
现在对a表做查询,要求页面上同时呈现出b表和c表的内容。
我现在的做法是在a表row绑定时,查出对应这条记录的b表和c表内容。
之后用repeater嵌套repeater的方法呈现。
因为客户要求一页需要呈现100条a表数据,也就是要查询100次b表和100次c表。
而实际上a、b、c都是视图本身就关联了不少表。页面速度过慢。

我想问的是有什么更好的方法吗?
比如:
将abc做成一个视图,一起查询出之后再用groupby划分。
这样开销如何?怎么根据a表分页?页面呈现有什么好方法?


另外,谁帮我回下这个贴
http://topic.csdn.net/u/20100105/11/e658a22a-82d6-40d2-8d33-0b1d54f8cc5b.html
自己顶了3次没人回,现在连结贴都不行
...全文
195 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoulingsmile 2010-05-06
  • 打赏
  • 举报
回复
太复杂了。。我只能帮你顶哈了。。
ltcszk 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 21aspnet 的回复:]

回复:
对于“一次统计总记录条数,一次取数据”这个存储过程可以同时返回多个数据集啊,所谓记录数就是一行一列而已。


引用 16 楼 ltcszk 的回复:
引用 13 楼 antiking 的回复:

那得看你的数据显示是怎么显示了。如果你又想显示所有明细,又想以order表分页.
那货物信息和箱信息就要拼接显示在一条记录里。
这个要看你的要求来写SQL
建议以多页面来显示……
[/Quote]
能详细一下返回多个数据集吗
zhulong1111 2010-05-05
  • 打赏
  • 举报
回复
子查询
ltcszk 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 newdigitime 的回复:]

你都没说清楚,对于查出C表,是根据B与C的关系,还是A与C的关系?
[/Quote]
用的是A与C的关系

顺便说下用的是linq
newdigitime 2010-05-05
  • 打赏
  • 举报
回复
你都没说清楚,对于查出C表,是根据B与C的关系,还是A与C的关系?
guyehanxinlei 2010-05-05
  • 打赏
  • 举报
回复
直接使用Top 100 加上left join来实现
hjw01592 2010-05-05
  • 打赏
  • 举报
回复
全部放到存储过程里处理。
Mr-Jee 2010-05-05
  • 打赏
  • 举报
回复
为什么要查询100次b表和c表呢?
深度Java 2010-05-05
  • 打赏
  • 举报
回复
回复:
对于“一次统计总记录条数,一次取数据”这个存储过程可以同时返回多个数据集啊,所谓记录数就是一行一列而已。


[Quote=引用 16 楼 ltcszk 的回复:]
引用 13 楼 antiking 的回复:

那得看你的数据显示是怎么显示了。如果你又想显示所有明细,又想以order表分页.
那货物信息和箱信息就要拼接显示在一条记录里。
这个要看你的要求来写SQL
建议以多页面来显示信息,不要以一个页面完成所有的操作.
这个毕竟是网页的.要考虑性能,加载速度等.


引用 15 楼 sxiaohui8709253 的回复:

建议使用下列……
[/Quote]
sxiaohui8709253 2010-05-05
  • 打赏
  • 举报
回复
数据量很大么 就这几个表的查询 速度不成问题的
sxiaohui8709253 2010-05-05
  • 打赏
  • 举报
回复
就这几个表查询 速度不成问题
ltcszk 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 antiking 的回复:]

那得看你的数据显示是怎么显示了。如果你又想显示所有明细,又想以order表分页.
那货物信息和箱信息就要拼接显示在一条记录里。
这个要看你的要求来写SQL
建议以多页面来显示信息,不要以一个页面完成所有的操作.
这个毕竟是网页的.要考虑性能,加载速度等.
[/Quote]
[Quote=引用 15 楼 sxiaohui8709253 的回复:]

建议使用下列表结构
订单表(orderid,orderdate,total,...)
集装箱表(Containerid,weight,...)
订单集装箱子表(ocid,orderid,Containerid...)
货物表(productid,proname,...)
集装箱货物子表(cpid,Containerid,productid)

第一次呈现订单编号,包含的集装箱个数,……
[/Quote]

这就是最初的设计啊,可是客户他要求要在查询界面显示详细信息,而且一页的记录还要多,速度要快。

[Quote=引用 14 楼 21aspnet 的回复:]
对数据库的操作只应该有一次!
[/Quote]
分页的话至少2次吧,一次统计总记录条数,一次取数据
sxiaohui8709253 2010-05-05
  • 打赏
  • 举报
回复
建议使用下列表结构
订单表(orderid,orderdate,total,...)
集装箱表(Containerid,weight,...)
订单集装箱子表(ocid,orderid,Containerid...)
货物表(productid,proname,...)
集装箱货物子表(cpid,Containerid,productid)

第一次呈现订单编号,包含的集装箱个数,商品个数,金额,日期,...
进入明细的时候,可以只显示订单的所有集装箱列表,在点击集装箱明细 在显示所有产品的列表情况
深度Java 2010-05-05
  • 打赏
  • 举报
回复
对数据库的操作只应该有一次!
antiking 2010-05-05
  • 打赏
  • 举报
回复
那得看你的数据显示是怎么显示了。如果你又想显示所有明细,又想以order表分页.
那货物信息和箱信息就要拼接显示在一条记录里。
这个要看你的要求来写SQL
建议以多页面来显示信息,不要以一个页面完成所有的操作.
这个毕竟是网页的.要考虑性能,加载速度等.
ltcszk 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 antiking 的回复:]

那张表为主表,哪张表为辅表??
以这个看的话
orderproduct以这张表为主表其他表为辅表
应为货物为最小单位



select * from orderproduct a
left outer join Container b on a.Containerid=b.Containerid
left outer join order c on a.orderid=c.……
[/Quote]
这也是我现在在考虑的方法,不过现在遇到几个问题
1.需求是要以order为单位呈现的。一条order记录里再加个table放这个order的Container和orderproduct。这点倒是不难,根据order的字段排序,显示的时候合并同样的字段就行了。问题是要根据order的数量分页,这样是以orderproduct为最小单位,总记录数是orderproduct的。
antiking 2010-05-05
  • 打赏
  • 举报
回复
那张表为主表,哪张表为辅表??
以这个看的话
orderproduct以这张表为主表其他表为辅表
应为货物为最小单位



select * from orderproduct a
left outer join Container b on a.Containerid=b.Containerid
left outer join order c on a.orderid=c.orderid
ltcszk 2010-05-05
  • 打赏
  • 举报
回复
order表
记录订单信息
Container表
记录集装箱信息,有orderid字段,与order表多对1的关系,1张订单内有多个集装箱
orderproduct表
记录集装箱内货物信息,有orderid字段,与order表多对1的关系,1张订单内有多种货物。
同时有Containerid字段,与Container表多对一,1个集装箱里可以装不同种货物。

现在对order表做查询
除了返回order表的结果外,还要对应order的Container和orderproduct的内容

我现在的做法是做完order的查询后,每一条记录绑定到repeater时,再查对应记录的Container和orderproduct(都是用orderid查)
如果查出100条order记录的话就要再做100次container查询和100次orderproduct查询。
这样页面响应速度太慢,所以我想求助一下有没有其他办法。

sxiaohui8709253 2010-05-05
  • 打赏
  • 举报
回复
这种情况 建议你给你表结构 跟你的需求
  • 打赏
  • 举报
回复
3个表,a表和b表一对多,b表和c表一对多,a表和c表也有1对多的关系。
而实际上a、b、c都是视图本身就关联了不少表。页面速度过慢。

看着有些矛盾,还有下面一句话

因为客户要求一页需要呈现100条a表数据,也就是要查询100次b表和100次c表。

为什么两张表都要查1000次呢?每次只出一条记录吗?
加载更多回复(1)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧