简体   繁体   English

选择嵌套查询 CodeIgniter

[英]select nested query CodeIgniter

Please help.请帮忙。 How to query this in CodeIgniter query builder.如何在 CodeIgniter 查询构建器中查询。 I don't know how to nested queries in codeigniter我不知道如何在 codeigniter 中嵌套查询

select * from customer aa
   left join (select a.customerId,
          max(case
                 when b.domainValue = 'CEDC' then
                       IFNULL(b.value, 0)
          end) 'CEDC',
          max(case
                 when b.domainValue = 'PEDC' then
                       IFNULL(b.value, 0)
          end) 'PEDC',
          max(case
                 when b.domainValue = 'TPC' then
                       IFNULL(b.value, 0)
          end) 'TPC',
          max(case
                 when b.domainValue = 'SUAL' then
                       IFNULL(b.value, 0)
          end) 'SUAL',
          max(case
                 when b.domainValue = 'PAGBILAO' then
                       IFNULL(b.value, 0)
          end) 'PAGBILAO'
          from customer a
          left join salescontractdetail b
                 on a.customerId = b.salesContractId             
    group by a.customerId) bb
   on aa.customerId = bb.customerId

Thanks谢谢

Use db->query使用db->query

$sql = "SELECT * ....."; # your formatted SQL query 
$this->db->query($sql);

Read Regular Queries in codeigniter.com阅读codeigniter.com 中的常规查询

You can rewrite your query as below您可以按如下方式重写您的查询

SELECT c.*,
    MAX(CASE WHEN s.domainValue = 'CEDC' THEN IFNULL(s.value, 0) ELSE 0 END) as CEDC,
    MAX(CASE WHEN s.domainValue = 'PEDC' THEN IFNULL(s.value, 0) ELSE 0  END) PEDC,
    MAX(CASE WHEN s.domainValue = 'TPC' THEN IFNULL(s.value, 0)  ELSE 0  END) TPC,
    MAX(CASE WHEN s.domainValue = 'SUAL' THEN IFNULL(s.value, 0) ELSE 0  END) SUAL,
    MAX(CASE WHEN s.domainValue = 'PAGBILAO' THEN IFNULL(s.value, 0) ELSE 0 END) PAGBILAO
FROM customer c
LEFT JOIN salescontractdetail s ON c.customerId = s.salesContractId
GROUP BY c.customerId

Using active record it can be written something like below使用活动记录,它可以像下面这样写

$this->db->select("c.*,
    MAX(CASE WHEN s.domainValue = 'CEDC' THEN IFNULL(s.value, 0) ELSE 0 END) as CEDC,
    MAX(CASE WHEN s.domainValue = 'PEDC' THEN IFNULL(s.value, 0) ELSE 0  END) PEDC,
    MAX(CASE WHEN s.domainValue = 'TPC' THEN IFNULL(s.value, 0)  ELSE 0  END) TPC,
    MAX(CASE WHEN s.domainValue = 'SUAL' THEN IFNULL(s.value, 0) ELSE 0  END) SUAL,
    MAX(CASE WHEN s.domainValue = 'PAGBILAO' THEN IFNULL(s.value, 0) END ELSE 0 ) PAGBILAO", FALSE)
            ->from('customer as c')
            ->join("salescontractdetail as s", "c.customerId = s.salesContractId", "left")
            ->group_by("c.customerId")
            ->get()
;
$this->db->select('"c.*,
    MAX(CASE WHEN s.domainValue = 'CEDC' THEN IFNULL(s.value, 0) ELSE 0 END) as CEDC,
    MAX(CASE WHEN s.domainValue = 'PEDC' THEN IFNULL(s.value, 0) ELSE 0  END) PEDC,
    MAX(CASE WHEN s.domainValue = 'TPC' THEN IFNULL(s.value, 0)  ELSE 0  END) TPC,
    MAX(CASE WHEN s.domainValue = 'SUAL' THEN IFNULL(s.value, 0) ELSE 0  END) SUAL,
    MAX(CASE WHEN s.domainValue = 'PAGBILAO' THEN IFNULL(s.value, 0) END ELSE 0 ) 
    PAGBILAO", FALSE);
        $this->db->FROM('customer as c');
        $this->db->join('salescontractdetail s', 'c.customerId = 
        s.salesContractId','left');
        $this->db->group_by("c.customerId");

        $query = $this->db->get()->result_array();

        return $query;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM