这个应该直接查就是了吧~
订单 join 详单 join 商品
where 订单日期 between startDate and endDate
非常感谢 确实有时候是自己想得太复杂了,另外数据库查询这块也比较菜,更没有大数据量的处理经验,这边的数据量增长还是挺快的,另外有个问题想咨询下你 比如某个查询需要 join 很多张表的情况 怎么处理性能会高些,比如 商品表{id,名称} 商品分类表{分类ID,分类名称} 订单详单表{id ,商品ID} 这种情况 如果我想查询
商品ID,商品分类,商品名称 这样的一个表 就得 join 3张表 据说这样性能也比较低的 这种情况怎么处理惠比较好?
@懒虫的枕头: 遇到瓶颈再说了。索引,减少查询字段,拆分大表都是可行的。没有几百万的数据,不是那么容易慢的~
跪求就何必呢,男儿膝下有黄金。
不知道你数据量有多大,其实很难给意见的。
我了解需求,一定要问客户数量级的,比如,一天多少张单,一张单多少商品项,共有多少不同的商品。
你问的这种查询是很基本的一个查询需求,一般都会实现的,在这上面,我没有碰到啥性能上的问题。
基本都是秒出,数据库5G,年营业额1个亿左右。
我不知道是不是自己没描述清楚,目前数据量不是很大,订单详单表就几万条数据 订单表少一些 商品表就更少了 几千条数据。我现在没有头绪的地方就是,尝试过连接查询几张表好像不能把某一时段的这些数据取出来,如果在循环里面取 又会出现PHP执行超时的情况 更别说秒出了,我贴上我的查询语句 你帮我看看吧
select i.sub_name 商品名称,SUM(i.total_price) 销售额,SUM(i.balance_total_price) 商家分成 ,count(o.id) 下单量 from fanwe_deal_order_item i LEFT JOIN fanwe_deal_order o on i.deal_id = o.id where GROUP BY deal_id 这样能统计出全部结果,但是我关于时间的条件加在哪儿呢 where o.create_time >=1404144000 and o.create_time < 1406256328 加上之后结果是空 都不知道怎么弄了 你看看我的查询语句有没有什么问题
@懒虫的枕头:
你这样有几个问题
1、订单表与订单子表应该是强制性级联删除的,不需要使用LEFT JOIN。
另外,查询中,LEFT JOIN的性能也比INNER JOIN的差。
2、 你确实对SQL了解太少,几万条数据就这样了... 我都以为你有几千万条了...
楼下的回答基本是对的,实际应用中,需要根据情况对日期条件进行一些小处理,但这不关性能的事。