一对多关系的数据,比如订单和订单商品,要一起显示订单和其商品信息,怎么样查询最优

yunhayuna 2016-03-18 05:11:02
一对多关系的数据,比如订单和订单商品,要一起显示订单和其商品信息,怎么样查询最优

就像淘宝一样,每个订单(order表)对应多个商品(order_item表)时,查询订单信息必须把该订单的商品主要信息也显示出来。

这个就是我们常说的一对多关系数据。
而查询时是按订单数据行分页查询,在hibernate中可以采用一对多关联查询查询得到结果,但会产生N+1问题,且这个也不存在延时加载,因为一打开页面就要把订单数据和其订单商品数据都显示。
这是互联网应用,订单和商品数据量都很大,且数据都在不断递增中。



我系统现在是用hibernate的,如果自己组装SQL然后进行表连接分页查询,不是按订单数分页查询的,而是按照订单产品总数分页查询

能从技术上解决还是需要重新设计数据关系?
...全文
9322 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhenglichenboy 2017-08-22
  • 打赏
  • 举报
回复
我之前做过,需求和表结构和你基本一样,不过我用的是mybaits,mybatis返回resultMap里边可以配置一个collection属性,这样一个左连接sql就能搞定
lqdj7166 2016-09-29
  • 打赏
  • 举报
回复
缓存之前历史数据,加载新数据。
wrong1111 2016-09-19
  • 打赏
  • 举报
回复
目前普遍的解决方法是二次查询。第一次查询订单表,然后使用in 一次性查询相关的订单产品详情,并组装出来。
  • 打赏
  • 举报
回复
一般情况下订单里面只是 记录产品的基本信息,比如名称,价格,图片网址,那完全可以把这些信息直接存在订单明细中,这样就不 需要去 访问产品表。
deng1234 2016-06-09
  • 打赏
  • 举报
回复
1.也可以用hibernate的, 把sql封装成视图。hibernate映射视图就行了。 2.用spring jdbc 模板。
tianfang 2016-06-07
  • 打赏
  • 举报
回复
非结构化存储,订单和订单行存储在一起
  • 打赏
  • 举报
回复
难道不是先查订单,后查该订单的商品信息吗? 不知你的页面是怎样展示的,通常都是先查订单,点击明细,才看到商品明细,这样也就是分开两次查询; 如果硬要 求 一起显示出来,那就是 连接查询,注意select返回的字段不要太多,where后面的条件判断字段要做索引。
  • 打赏
  • 举报
回复
我系统现在是用hibernate的,如果自己组装SQL然后进行表连接分页查询,不是按订单数分页查询的,而是按照订单产品总数分页查询 这个怎么理解?肯定可以按订单分页的啊,为什么会按订单产品分页
huayangli 2016-04-30
  • 打赏
  • 举报
回复

SELECT 
	CONCAT(
		'[',
		GROUP_CONCAT(
			CONCAT('{"ContestSubject":"', cn.ContestSubject, '",'),
			CONCAT('"ContestMoney":"', cn.ContestMoney, '",'),
			CONCAT('"ContestId":"', cn.ContestiD, '"}')
		),
		']'
	) AS BriefContest ,
	cp.CompetitionId,
	cp.CompetitionName,
	cp.CompetitionSession,
	cp.CompetitionPicture,
	cp.CompetitionObjectDescribe,
	cp.CompetitionEnrollStartTime,
	cp.CompetitionEnrollEndTime,
	cp.CompetitionState

FROM
	competition as cp,
	contest as cn

WHERE 
	cn.CompetitionId = cp.CompetitionId AND
	cp.competitionState in (1, 2, 5)

GROUP BY cp.competitionId;
END
huayangli 2016-04-30
  • 打赏
  • 举报
回复
使用存储过程+Mysql的一个简单语法
huayangli 2016-04-30
  • 打赏
  • 举报
回复
刚好在项目上遇到过这种问题。我们的环境是最基本的JDBC,也没考虑性能什么的,毕竟是新手.....
大雨将至 2016-03-26
  • 打赏
  • 举报
回复
想要高性能就别用hibernate,大型应用都要针对使用的数据库特性做优化 如果hibernate就能解决问题,大公司养那么多数据库专家干吗

25,985

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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