Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么(我的)SQL中的Sum()函数返回的值是我期望的值的两倍?_Php_Mysql_Sql_Zend Framework2 - Fatal编程技术网

Php 为什么(我的)SQL中的Sum()函数返回的值是我期望的值的两倍?

Php 为什么(我的)SQL中的Sum()函数返回的值是我期望的值的两倍?,php,mysql,sql,zend-framework2,Php,Mysql,Sql,Zend Framework2,我需要两个不同表中两个不同列的总和,分别是tbl\u bill和tbl\u receive 待确认收据 id receipt_no member_id receipt_amount 1 21001 21 20500 2 21002 21 200 tbl_成员 id name 21 priya tbl\U发票 id bill_no order_id member_id bill_va

我需要两个不同表中两个不同列的总和,分别是
tbl\u bill
tbl\u receive

待确认收据

 id receipt_no  member_id   receipt_amount
 1  21001         21        20500
 2  21002         21        200
tbl_成员

  id    name
  21    priya
tbl\U发票

 id bill_no  order_id   member_id     bill_value
 1  30001       30          21          20928
 2  0002501     25          21          12030
我想要这样的答案

member_id  member_name  receipt_sum  bill_sum   
21         priya        20700         32958
我试着做左连接,但它的总和是原来的两倍。有人能帮我吗

$adapter = $this->tableGateway->getAdapter();
       $orderTable = new TableGateway('tbl_receipt', $adapter);
       $sqlSelect = $orderTable->getSql()->select();
       $sqlSelect->columns(array('id'=>'id','bill_amount'=>'bill_total','sum_receipt_amount'=>new \Zend\Db\Sql\Expression('SUM(tbl_receipt.receipt_amount)'))); 
       $sqlSelect->join('tbl_member','tbl_member.id = tbl_receipt.member_id', array('member_id'=>'id','member_name'=>'name'),'LEFT');
     //  $sqlSelect->join('tbl_receipt','tbl_receipt.member_id = tbl_bill.member_id', array('receipt_id'=>new \Zend\Db\Sql\Expression('(tbl_receipt.receipt_amount)')),'LEFT');


       $sqlSelect->group('tbl_member.id');
       $resultSet = $orderTable->selectWith($sqlSelect);
        //echo"<pre>";

   // print_r($resultSet); die;
  return $resultSet;
$adapter=$this->tableGateway->getAdapter();
$orderTable=新的TableGateway('tbl_收据',$adapter);
$sqlSelect=$orderTable->getSql()->select();
$sqlSelect->columns(数组('id'=>'id','bill\u amount'=>'bill\u total','sum\u receipt\u amount'=>new\Zend\Db\Sql\Expression('sum(tbl\u receipt.receipt\u amount'));
$sqlSelect->join('tbl_member','tbl_member.id=tbl_receipt.member_id',数组('member_id'=>'id','member_name'=>'name'),'LEFT');
//$sqlSelect->join('tbl_receipt','tbl_receipt.member_id=tbl_bill.member_id',数组('receipt_id'=>new\Zend\Db\Sql\Expression('tbl_receipt.receipt_amount'),'LEFT');
$sqlSelect->group('tbl_member.id');
$resultSet=$orderTable->selectWith($sqlSelect);
//回声“;
select m.id, m.name,t1.sum_amount, t2.sum_total
from tbl_member m  
left join (
  select member_id, sum(receipt_amount) sum_amount 
  from tbl_receipt
  group by member_id
) t1 on t1.member_id = m.member_id 
left  join (
  select member_id, sum(total) sum_total
  from tbl_invoice
  group by member_id
) t2  on t2.t1.member_id = m.member_id 
//打印(结果集);死亡 返回$resultSet;
在SQL中,您应该将join留在sum的结果上


在SQL中,应该在sum的结果上留下join


为了清楚起见,请提供您现有的查询。“我尝试了左联接,但它使总和加倍。”-它在哪里?也许你在某个地方犯了错误,我们不知道;我需要两个不同表的两个不同列的总和-哪两个表?这里有3个。这是codeigniter吗?@FunkFortyNiner zend F2请提供您现有的查询以澄清。“我尝试了左连接,但它使总和加倍。”-它在哪里?也许你在某个地方犯了错误,我们不知道;我需要两个不同表的两个不同列的总和-哪两个表?这里有3个。这是codeigniter吗?@FunkFortyNiner zend F2这里的要点是,您使用的是子查询,而不仅仅是左连接。我在聚合结果上使用了两个左连接。。因此,请避免与非聚合行的联接相关的重复。这里的要点是,您使用的是子查询,而不仅仅是左联接。我在聚合结果上使用了两个左联接。。因此,避免与非聚合行的联接相关的重复。。