【问题标题】:Group by a column that has repeating data in codeigniter按在 codeigniter 中具有重复数据的列分组
【发布时间】:2021-06-06 15:15:56
【问题描述】:

餐桌推车

表购物车插件

目前获得:

[134]
   -[52]
[135]
   -[49]

预期输出为数组:

[134]
  -[52]
[135]
  -[49]
  -[50]
  -[51]

这意味着基于每个 cart_id 只获取一行

型号

function get_total_sum_of_addons_by_cartid($id)
    {
       
        $this->db->query("SET sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));"); //prevent error of non aggregate columns
        $this->db->select('a.aid');
        $this->db->from('cart_addons AS a, cart as c');
        $this->db->where('a.cart_id', $id);
        $this->db->group_by('a.cart_id');
        $query = $this->db->get('cart_addons');    
        $result_array = $query->result_array();
         
        return $result_array;
        
    }

无法弄清楚为什么我无法获得异常输出,感谢任何帮助。

【问题讨论】:

  • 结果与您现在使用 group by 的方式一样。只有当您想使用 sum 或任何其他聚合函数时,才需要 Group by。在表之间使用常规 JOIN 以获得所需的结果。
  • 您也可以尝试按两列分组,看看您是否更接近预期结果:$this->db->group_by(array("a.cart_id", "a.aid"));
  • 感谢您的建议。

标签: php sql codeigniter


【解决方案1】:

我刚刚应用了另一种方法,现在我得到了预期的结果。

function get_total_sum_of_addons_by_cartid($id)
{
   
    $query = $this->db->select('*')
             ->from('cart_addons')
             ->where('`cart_id` in', '(select `id` from `cart` where `id` = '.$id.')', false)
             ->get(); 
    $result_array = $query->result_array();
     
    return $result_array;
    
}

$result_array 现在返回以下输出 if cart_id = 135:

 Array
(
    [0] => Array
        (
            [id] => 11
            [cart_id] => 135
            [aid] => 49
        )

    [1] => Array
        (
            [id] => 12
            [cart_id] => 135
            [aid] => 50
        )

    [2] => Array
        (
            [id] => 13
            [cart_id] => 135
            [aid] => 51
        )

)

【讨论】:

    猜你喜欢
    • 2013-07-10
    • 2012-01-23
    • 2018-07-07
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多