一对多关系的数据,比如订单和订单商品,要一起显示订单和其商品信息,像淘宝那样,每个订单(order表)对应多个商品(order_item表)时,查询订单信息必须把该订单的商品主要信息也显示出来。
$sql="select *,sum(`pro_price`*`order_account`) as all_money from cms_order_detail d , cms_order o where o.order_num=d.order_num and o.member_id='{$_SESSION['member_id']}' group by d.pro_id order by order_time desc"; 这样的语句只能查询出一条商品信息,,不能查询全部,是什么原因!

解决方案 »

  1.   

    你用了 group by 子句,自然就聚类了
      

  2.   

    看你的句子像是要把同个pro_id的商品合计再罗列出来是吗?我也不知道你表结构怎样,用left join试试select *,sum(`pro_price`*`order_account`) as all_money 
    from cms_order o left join  cms_order_detail d  on o.order_num=d.order_num and o.member_id='{$_SESSION['member_id']}' group by d.pro_id order by order_time desc
      

  3.   


    $sql="select *,(`pro_price`*`order_account`) as all_money from cms_order_detail d , cms_order o where o.order_num=d.order_num and o.member_id='{$_SESSION['member_id']}' order by o.order_num desc, order_time desc";
      

  4.   

    这么说吧,一条订单里肯定包含不同的商品吧,所以有不同的商品pro_id,商品名称,数量,单价,小计。就像淘宝那样,,一条订单,首先有日期,订单号,总金额,然后下面还有详情(商品名称,数量,单价,小计),这些信息都是同时显示出来,,如果left join 做的话,,后面还是要加上条件 where o.order_num=d.order_num,,目前还是实现不了我要的效果
      

  5.   

    select * form 订单, 商品表 where 订单.商品id = 商品表.商品id and 订单.订单id = 订单号
      

  6.   


    我现在做的这个查询还没有设计到商品表,,,其实我做这个整个查询里面包含了4个表,,会员表,订单表,订单详情表,商品表,现在我只是对中间两个表进行查询!
    订单表(cms_order):order_id , member_id(会员id) , order_num(订单号)  , order_sum(订单总金额)
    订单详情表(cms_order_detail):detail_id , order_num(订单号) , pro_id(产品id) , pro_price(商品单价)  , order_account(商品数量)
    这两个表是由order_num关联起来。 想实现的效果是:
     
    订单号:xxxxxxxxxx   时间:xxxxxx    订单总额:xxxx
       商品1:xx     单价: xx     数量:xx     小计:xx
       商品2:xx     单价: xx     数量:xx     小计:xx
       商品3:xx     单价: xx     数量:xx     小计:xx
      

  7.   


    $sql="select *,sum(`pro_price`*`order_account`) as all_money from   cms_order_detail d , cms_order o  where o.order_num=d.order_num and o.member_id='{$_SESSION['member_id']}' group by d.order_num   order by order_time desc";我现在用上面这条语句可以实现这样的效果
    订单号:xxxxxxxxxx   时间:xxxxxx    订单总额:xxxx
       商品1:xx     单价: xx     数量:xx     小计:xx只能显示一条商品,,但是总额那些都可以查到,,就是不知道怎么显示其他的商品
      

  8.   

    查询应该是没问题的,现在是怎么显示的问题,,感觉要用两个foreach,,,怎么用呢
      

  9.   

    group by 是聚类,用了他自然就没有分项了
      

  10.   

    如果不用group by 的话,,总额 all_money 怎么算,因为我这个要把两行记录加起来才算出的总额
      

  11.   

    很奇怪!你读出多条时,就不能加了吗?
    何况不还有联合(union)吗?
      

  12.   


    union 在我这个查询里面怎么用啊,,不懂啊
      

  13.   

    SQL语句:
    SELECT o.order_num,o.order_sum,o.order_time,d.pro_id,d.pro_price,d.order_account,d.pro_price*d.order_account as total from cms_order o left join cms_order_detail d on (o.order_num=d.order_num) where  o.member_id='{$_SESSION['member_id']}' order by order_time desc再将这查询出来的数据循环存到一个多维数组中,第一层放订单信息,key为order_num,第二层放商品详细 key为pro_id$data[$rs["order_num"]]["order_num"]=$rs["order_num"];
    $data[$rs["order_num"]]["order_time"]=$rs["order_time"];
    $data[$rs["order_num"]]["order_sum"]=$rs["order_sum"];
    $data[$rs["order_num"]]["proData"][$rs["pro_id"]]["pro_id"]=$rs["pro_id"];
    $data[$rs["order_num"]]["proData"][$rs["pro_id"]]["pro_price"]=$rs["pro_price"];
    $data[$rs["order_num"]]["proData"][$rs["pro_id"]]["order_account"]=$rs["order_account"];
    $data[$rs["order_num"]]["proData"][$rs["pro_id"]]["total"]=$rs["total"];然后在页面循环按格式输出对应的数据
    foreach($data as $k=>$v){
    echo "订单号:".$v["order_num"]."   "."时间:".$v["order_time"]."   "."订单总额:".$v["order_sum"];
    $n=1;
    foreach($v["proData"] as $pk=>$pv){
    echo "商品".$n.":".$pv["pro_id"]."   "."单价:".$pv["pro_price"]."   "."数量:".$pv["order_account"]."   "."小计:".$pv["total"];
    $n++;
    }
    }
    输出格式与美化,你自己修正