【问题标题】:how can we join this two table results in to one我们如何将这两个表结果合并为一个
【发布时间】:2019-09-10 13:45:43
【问题描述】:

在这里,我想将这两个查询结果合并为一个结果 第一个查询看起来像这样

   $this->db->select('bills.date as d_date,bill_details.agent_name,
   SUM(bill_details.profit) AS total_profit');
   $this->db->join('bill_details', 'bill_details.bill_id=bills.id','left'); 
   $this->db->where('DATE(bills.date) >=', $start_date);
   $this->db->where('DATE(bills.date) <=', $end_date); 
   $this->db->group_by('Date(bills.date)');
   $this->db->group_by('bills.customerid');
   $query1 = $this->db->get('bills')->result();
   return $query1;

结果是这样的

Name    Date          Purchase  
Ned     2019-07-26      210.60 

第二个查询如下所示

    $this->db->select('assigned_result.date,assigned_result.user_id,SUM(assigned_result.total_price) AS t_price,SUM(assigned_result.total_dc) AS t_dc');
    $this->db->where('DATE(assigned_result.date) >=', $start_date);
    $this->db->where('DATE(assigned_result.date) <=', $end_date);

    $this->db->group_by('assigned_result.user_id');
    $query2 = $this->db->get('assigned_result')->result(); 

第二个查询结果是这样的

Name    Date          winning
Ned     2019-07-26      120

现在我想像这样组合查询

Name    Date          Purchase   winning 
Ned     2019-07-26      210.60         120

为了得到这个结果,我加入了查询并像这样返回

$this->db->select('bills.date as d_date,bill_details.agent_name,
   SUM(bill_details.profit) AS total_profit,SUM(assigned_result.total_price) AS t_price,SUM(assigned_result.total_dc) AS t_dc');
   $this->db->join('bill_details', 'bill_details.bill_id=bills.id','left'); 
   $this->db->join('assigned_result', 'bills.id=assigned_result.bill_no', 'left');
   $this->db->where('DATE(bills.date) >=', $start_date);
   $this->db->where('DATE(bills.date) <=', $end_date); 
   $this->db->group_by('Date(bills.date)');
   $this->db->group_by('bills.customerid');
   $query1 = $this->db->get('bills')->result();
   return $query1;

但我得到这样的结果

Name    Date          Purchase  winning
Ned     2019-07-26      226      160

purchase amount 搞错了。

【问题讨论】:

  • 问题是assigned_result表的加入。加入时会在 total_profit 中获得额外的价值
  • 任何人的想法
  • 第一次sql查询好像出错了,这里$this-&gt;db-&gt;join('bills', 'bill_details.bill_id=bills.id','left'); 。否则,我可以帮助您完成最后一个查询。
  • @AksenP 还是一样...
  • @AksenP 我已经尝试了很多,但仍然没有得到

标签: php mysql join codeigniter-3


【解决方案1】:

根据您的SQL Editor 数据,下一个查询适合您:

select 
   B.user_id, 
   B.agent_name, 
   sum(B.profit),
   C2.tprice, 
   C2.tdc 
from B 
      join A on A.id = B.bill_id and A.customerid = B.user_id
 left join ( select 
                  C.user_id, 
                  C.data_id, 
                  C.bill_no, 
                  sum(C.total_price) tprice, 
                  sum(C.total_dc) tdc from C) C2 on C2.data_id = B.id and C2.user_id = B.user_id 
group by B.user_id;

PHP: (reference)

    $this->db->select('DATE(bills.date) as d_date,
                      bill_details.user_id,
                      bill_details.agent_name,
                      SUM(bill_details.profit) AS total_profit,
                      C2.tprice AS t_price,
                      C2.tdc AS t_dc');

   $this->db->join('bills', 'bills.id = bill_details.bill_id and bills.customerid = bill_details.user_id','left');
   $this->db->join('(select 
                assigned_result.user_id, 
                assigned_result.data_id, 
                assigned_result.bill_no, 
                sum(assigned_result.total_price) tprice, 
                sum(assigned_result.total_dc) tdc from assigned_result) as C2','C2.data_id = bill_details.id and C2.user_id = bill_details.user_id', 'LEFT'); 

   $this->db->where('DATE(bills.date) >=', $start_date);
   $this->db->where('DATE(bills.date) <=', $end_date); 

   $this->db->group_by('bill_details.user_id)'); 

   $query1 = $this->db->get('bill_details')->result();
   return $query1;

    $this->db->select('assigned_result.user_id, 
                assigned_result.data_id, 
                assigned_result.bill_no, 
                sum(assigned_result.total_price) tprice, 
                sum(assigned_result.total_dc) tdc')
            ->from('assigned_result');   

    $subquery = $this->db->_compile_select();
    $this->db->_reset_select();  

    $this->db->select('DATE(bills.date) as d_date,
                      bill_details.user_id,
                      bill_details.agent_name,
                      SUM(bill_details.profit) AS total_profit,
                      C2.tprice AS t_price,
                      C2.tdc AS t_dc');

   $this->db->join('bills', 'bills.id = bill_details.bill_id and bills.customerid = bill_details.user_id','left');
   $this->db->join("($subquery) C2",'C2.data_id = bill_details.id and C2.user_id = bill_details.user_id', 'LEFT'); 

   $this->db->where('DATE(bills.date) >=', $start_date);
   $this->db->where('DATE(bills.date) <=', $end_date); 

   $this->db->group_by('bill_details.user_id)'); 

   $query1 = $this->db->get('bill_details')->result();
   return $query1;

【讨论】:

  • 不,我仍然得到相同的结果..这是我的数据收集,我将表名 bills 更改为 Abill_detailsBassigned_resultC@ 987654322@
  • @user_777, sqlfiddle.com/#!9/c85a910/39 现在我将帮助您进行新的 php 查询。
  • 感谢您在第一次查询中的帮助,我得到了 total_profit 值,但 t_pricet_dc 为空
  • @user_777,尝试查找如何进行子查询,您需要创建C2 table 用于加入,如您在SQL Editor 中看到的,阅读参考并尝试获取它。您会看到它取决于 CodeIgniter 版本和核心文件。
猜你喜欢
  • 2015-08-15
  • 2017-08-15
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 2015-06-28
  • 1970-01-01
相关资源
最近更新 更多