CodeIgniter连接表With SUM

vh0rcniy  于 2023-06-19  发布在  其他
关注(0)|答案(3)|浏览(74)

我有两张table

products   sale_items
--------   ----------
id         id
code       product_id 
name       quantity 
price      ...
...

计算每个产品的销售数量,所有这些都在一个查询中完成。我试过这样的方法,但它不起作用:

public function getProductsListing()
    {       
       
        $this->db->select("products.id, products.code, products.name");
        $this->db->from('products');

        $this->db->join('sale_items','sum(COALESCE(quantity, 0)) as qte', false)
        ->where("registers_id = '{$this->session->register_id}' and  sale_items.product_id = products.id", null, false);  
    
         
        $query = $this->db->get();
        if ($query->num_rows() > 0) {
            foreach (($query->result()) as $row) {
                $data[] = $row;
                var_dump($data);
            }
            return $data;
        }
        else
        {
            return false;
        }
    }
arknldoa

arknldoa1#

我不使用CI,但我认为您需要将false作为第二个参数传递给select(),以阻止CI尝试转义列名。

$this->db->select('p.id, p.code, p.name, IFNULL(SUM(s.quantity), 0) AS totalQuantity', false)
    ->from('products as p')
    ->join('sale_items as s', 'p.id = s.product_id', 'left')
    ->where('registers_id', $this->session->register_id) 
    ->group_by('p.id');

$result = $this->db->get();

请注意,我将SUM(COALESCE(quantity, 0))切换为IFNULL(SUM(s.quantity), 0),因此IFNULL()在聚合上运行,而不是在每行上运行。

k2fxgqgv

k2fxgqgv2#

你可以简单地在codeigniter中像这样连接表

$this->db->select('products.id, products.code, products.name');
$this->db->from('products');
$this->db->join('sale_items', 'products.id= products.product_id ');
$this->db->where(array('registers_id '=>$this->session->register_id))
$query = $this->db->get();
7fhtutme

7fhtutme3#

您可以在产品ID上使用group by子句:

$this->db->select('SUM(COALESCE(quantity, 0)) as toalQuantity,p.id, p.code, p.name')
 ->from('products as p')
 ->join('sale_items as s', 's.product_id = p.id', 'left')
 //->where('registers_id', $this->session->register_id) 
 ->group_by('p.id')
 ->get();

相关问题