2015-09-23 107 views
0

这是我笨查询MySQL查询优化和更新需要

$this->db->select('o.*,seo.price as seo_price,SUM(domain.price) as domain_price,SUM(bes.price) as bes_price, SUM(op.price) as payment_price'); 
    $this->db->from('order as o'); 
    $this->db->join("order_package_seo as seo", "seo.order_id = o.id", "left"); 
    $this->db->join("order_package_domain as domain", "domain.order_id = o.id", "left"); 
    $this->db->join("order_package_bespoke as bes", "bes.order_id = o.id", "left"); 
    $this->db->join("order_payment as op", "op.order_id = o.id", "left"); 
    $this->db->where("o.id" , $id); 
    $query = $this->db->get(); 
    return $query->row(); 

我有3条在“order_package_beskope”表和其他1所有 我想摆脱所有的表价格ORDER_ID 被我需要使用group_by独特或任何其他方法需要你的建议。

+0

确定,所以什么是它返回.. –

+1

它返回所有的价格多由3添加组。即域名价格是123,但其返回369. –

+1

我可以解释更多,如果你可以帮助.. –

回答

0

变化这样

$this->db->select('o.*,seo.price as seo_price,domain.price ,SUM(bes.price) as bes_price, op.price as payment_price'); 
$this->db->from('order as o'); 
$this->db->join("order_package_seo as seo", "seo.order_id = o.id", "left"); 
$this->db->join("order_package_domain as domain", "domain.order_id = o.id", "left"); 
$this->db->join("order_package_bespoke as bes", "bes.order_id = o.id", "left"); 
$this->db->join("order_payment as op", "op.order_id = o.id", "left"); 
$this->db->where("o.id" , $id); 
$this->db->group_by("o.id"); 
$query = $this->db->get(); 
return $query->row(); 

第一个语句,因为,你提到的表“order_package_beskope”有3条记录,因此只有表的字段“bes_price”需要的总和。所有其他表只有一条记录,因此如果添加SUM,它将乘以3(order_package_bespoke记录的数量)。

所以在选择其他表中的字段删除SUM和o.id