doudao9896 2017-03-30 06:14
浏览 53

使用Codeigniter中的QUERY BUILDER对JOINS的结果进行分组

I have the following function, the params are "asc,PV1"

public function get_products($order, $sku){
    if(is_array($result) && $result['active']){
        $id_emp = $result['id_emp'];
        $mts = 'module_tienda_status';
        $mtc = 'module_tienda_categories';
        $mtp = 'module_tienda_productos';
        $mtpt = 'module_tienda_product_type';
        $mtpa = 'module_tienda_product_attribute';
        $mta = 'module_tienda_attributes';
        $mtao = 'module_tienda_attribute_option';
        $mtpv = 'module_tienda_product_variation';
        $mtpvo = 'module_tienda_product_variation_options';
        $get = array(
            $mtp.'.id',
            $mtp.'.name',
            $mtp.'.sku',
            $mtp.'.desc_short',
            $mtp.'.desc_long',
            $mtp.'.id_category',
            $mtp.'.price',
            $mtp.'.id_status',
            $mtp.'.inventory',
            $mtp.'.imgs',
            $mtp.'.qty',
            $mtp.'.featured',
            $mtc.'.name as cat_name',
            $mtpt.'.id as type_id',
            $mtpa.'.id_attribute',
            $mtpa.'.id_option',
            $mta.'.name as attr_name',
            $mtao.'.option as opt_name',
            $mtpv.'.inventory as var_inv',
            $mtpv.'.qty as var_qty',
            $mtpv.'.price as var_price',
            $mtpvo.'.id_product_variation as var_id',
            $mtpvo.'.id_attribute as var_attr',
            $mtpvo.'.id_option as var_opt'
        );
        $this->db->select($get);
        $this->db->from($mts);
        $this->db->join($mtp, $mtp.'.id_status = '.$mts.'.id');
        $this->db->join($mtc, $mtp.'.id_category = '.$mtc.'.id', 'left');
        $this->db->join($mtpt, $mtp.'.id_product_type = '.$mtpt.'.id');
        $this->db->join($mtpa, $mtpa.'.id_product = '.$mtp.'.id', 'left');
        $this->db->join($mta, $mta.'.id = '.$mtpa.'.id_attribute', 'left');
        $this->db->join($mtao, $mtao.'.id = '.$mtpa.'.id_option', 'left');
        $this->db->join($mtpv, $mtp.'.id = '.$mtpv.'.id_product', 'left');
        $this->db->join($mtpvo, $mtpv.'.id = '.$mtpvo.'.id_product_variation', 'left');
        $this->db->where($mtp.'.id_emp', $id_emp);
        if($sku != 'null'){
            $this->db->where($mtp.'.sku', $sku);
        }
        if(!is_null($order)){
            $this->db->order_by('module_tienda_productos.created', $order);
        }
        $query = $this->db->get()->result();
    }else{
        return $result;
    }
}

the result is an array with 49 rows of the same product, the difference is that there are different attributes and variations, here is the example https://pastebin.com/3X4w6wEi

What i want is 1 single result with an array of attributes and 1 array of variations something like this (is a json, please decode it)

[{'id':'343','name':'Producto variable 1','sku':'PV1','desc_short':'<p><br></p>','desc_long':'<p><br></p>','id_category':null,'price':null,'id_status':'1','inventory':'0','imgs':null,'qty':'0','featured':'0','cat_name':null,'type_id':'2','attributes':[{'id_attribute':'49','attr_name':'Colors','opts':{'107':'Amarillo','110':'Celeste','121':'Rojo','122':'Azul'}},{'id_attribute':'57','attr_name':'Size','opts':{'112':'xs','113':'s','114':'n','116':'xl'}}],'variations':[{'var_id':'42','var_inv':'0','var_qty':'0','var_price':'0.00','opts':[{'id_attribute':'49','attr_name':'Colors','opts':{'107':'Amarillo','110':'Celeste','121':'Rojo','122':'Azul'}},{'id_attribute':'57','attr_name':'Size','opts':{'112':'xs'}}]}]}]
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥100 角动量包络面如何用MATLAB绘制
    • ¥15 merge函数占用内存过大
    • ¥15 Revit2020下载问题
    • ¥15 使用EMD去噪处理RML2016数据集时候的原理
    • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
    • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数
    • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
    • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
    • ¥15 如何在炒股软件中,爬到我想看的日k线
    • ¥15 seatunnel 怎么配置Elasticsearch