请教关于订单和订单商品总量的 语句正确写法

2016-07-07 14:55 来源:www.chinab4c.com 作者:ecshop专家


  1. $sql = "SELECT count(oi.order_id) as access_count, FLOOR((add_time - $start_date) / (24 * 3600)) AS sn, add_time, ROUND(sum(goods_amount),2)as goods_amount ,sum(shipping_fee) as shipping_fee ,sum(go.goods_number) as goods_number,sum(return_number) as return_number ,sum(subtotal) as subtotal ,oi.user_id,us.user_id,us.user_name
  2. FROM " . $GLOBALS['ecs']->table('order_info') . " AS oi " . "
  3. LEFT JOIN " .$GLOBALS['ecs']->table('users'). " AS us ON us.user_id=oi.user_id
  4. LEFT JOIN " .$GLOBALS['ecs']->table('order_goods'). " AS go ON go.order_id=oi.order_id
  5. WHERE order_status in (4,5) and add_time >= '$start_date' AND add_time <= " .($end_date + 86400). " ".$user_name." GROUP BY sn order by add_time,go.order_id desc";
复制代码



以上代码是用于 可以根据所选 日期来统计 指定时间内的 订单数量、售出的商品总数量 等,

LEFT JOIN " .$GLOBALS['ecs']->table('order_goods'). " AS go ON go.order_id=oi.order_id

偶增加这个 是为了统计 'order_goods' 表里 订单对于的商品数量,现在出现一个问题:比如一个订单里 有3个商品,正确统计出来应该是 1个订单 ,3个商品的,但是现在统计出来 却是 3个订单, 9个商品了,所以它现在是根据商品数量来重复统计了

GROUP BY sn order by add_time,go.order_id desc, 但是为什么这个语句不能把它分组为 唯一的呢?


正确的应该是怎么写的?哪位指点下以上程序的 错误之处,谢谢!!!

回答:
怎么没人指点的??

不是很懂这方面



懂的 好心人 怎么没出现的呢?

怎么没人指点的??

真不知道你的 FLOOR((add_time - 1350805176) / (24 * 3600)) AS sn 是干嘛用的
而且还用来分组,乱七八糟的
还有SUM(return_number) AS return_number,
SUM(subtotal) AS subtotal,
是干嘛的?
我在你查询的三个表没看到过这两个字段

如果你要分组,首先要确定是按照用户,还是按照订单(订单id) 或者下单时间来分组
如果是按照用户 就不要读取下单时间 订单号之类的具体信息
按照用户分组 意思是统计这个用户在这段时间内所有订单的信息,订单相关信息就应该只有订单总量(count(order_id)) 商品总价(sum(goods_amout)) 订单商品总数(sum(goods_number)) 等信息。 每一个具体单子信息不应该显示在列表,因为不能反映这一行数据。

简单说就是按用户分组:user_id -> orders 关系本来是一对多, 但是要把订单信息扁平化变成一对一, 扁平化的过程就是统计总量,而不能出现具体信息。

如果按照订单号(order_id) 就无所谓了, 所有信息都可以显示出来 但是订单商品只能显示一个 总数 总价等,因为一个订单可能包含不止一个商品
同上 order_id -> order_goods 是一对多 变成 一对一

举例来说
不分组的情况

其实就是显示所有订单商品

按用户分组

不显示每一订单细节,合并所有订单以及订单商品

按订单分组

显示订单细节,合并订单商品

PS 还得注意一个问题 按订单分组(order_id)与按订单时间(add_time)一般情况下一致,但也可能出现不一致的情况,就是两个用户同时下单。



很感谢 yushine 的详细指导,或许我说不够清楚,抱歉!在这里跟你解释下,SUM(return_number) AS return_number, SUM(subtotal) AS subtotal,
这两个 是我新增的 退款商品数量和退款金额 的字段
你上面说的我基本明白,其实我是想根据选择的时间段统计 每天的总数量 然后列出来,现在的问题,就是有些订单有多少个商品,它就统计多少次,就是重复了,GROUP BY sn order by add_time,go.order_id desc ,这里是不是有问题,应该怎么写? 希望得到大家的指教,谢谢!!

我要实现的效果如下


怎么没人指点了呢

那么简单的问题 如果还么解决联系 QQ283087481

简单的却没有人指点了?

:o:o:o

:dizzy:

:Q:Q