Group by和distinct在Codeigniter中的Oracle中不起作用

时间:2018-07-21 12:48:02

标签: php oracle codeigniter

在MySQL中,distinct和group都可以正常工作,但是在Oracle中,它不能正常工作,并提供以下错误:

不同:

ORA-01791: not a SELECTed expression

分组依据:

ORA-00979: not a GROUP BY expression

我的代码是:

public function getOrgModules() {
        $session_info = $this->session->userdata('logged_in');
        $org = $session_info['ORG_ID'];
        $org_group = $session_info['USERGRP_ID'];
        $org_group_level = $session_info['USERLVL_ID'];
        $user = $session_info['USER_ID'];
        //$this->db->distinct('SA_ORG_MODULES.SA_MODULE_ID');
        $this->db->select('SA_ORG_MODULES.SA_MODULE_NAME,ATI_MODULES.MODULE_NAME_BN,ATI_MODULES.MODULE_ICON, SA_ORG_MODULES.SA_MODULE_ID, ATI_MODULES.CATEGORY');
        $this->db->from('SA_UGLW_MLINK');
        $this->db->join('SA_ORG_MODULES', 'SA_UGLW_MLINK.SA_MODULE_ID = SA_ORG_MODULES.SA_MODULE_ID', 'left');
        $this->db->join('ATI_MODULES', 'SA_ORG_MODULES.MODULE_IDS = ATI_MODULES.MODULE_ID', 'left');
        $this->db->where('SA_UGLW_MLINK.USERGRP_ID', $org_group);
        $this->db->where('SA_UGLW_MLINK.UG_LEVEL_ID', $org_group_level);
        $this->db->or_where('SA_UGLW_MLINK.USER_ID', $user);
        $this->db->where('SA_UGLW_MLINK.ORG_ID', $org);
        $this->db->or_where('SA_UGLW_MLINK.CREATE_', "1");
        $this->db->or_where('SA_UGLW_MLINK.READ', "1");
        $this->db->or_where('SA_UGLW_MLINK.UPDATE_', "1");
        $this->db->or_where('SA_UGLW_MLINK.DELETE_', "1");
        $this->db->or_where('SA_UGLW_MLINK.STATUS', "1");
        $this->db->group_by('SA_ORG_MODULES.SA_MODULE_ID');
        $this->db->order_by("ATI_MODULES.SL_NO", "asc");
        return $this->db->get()->result();
    }

请帮助我。预先感谢

2 个答案:

答案 0 :(得分:1)

希望这对您有帮助:

在您的select子句中将COUNT(SA_ORG_MODULES.SA_MODULE_ID)添加到分组方式如下:

$this->db->select('SA_ORG_MODULES.SA_MODULE_NAME, 
                   ATI_MODULES.MODULE_NAME_BN,
                   ATI_MODULES.MODULE_ICON, 
                   SA_ORG_MODULES.SA_MODULE_ID,  
                   ATI_MODULES.CATEGORY, 

                   COUNT(SA_ORG_MODULES.SA_MODULE_ID)
            ');

答案 1 :(得分:1)

问题在于您要按SA_ORG_MODULES.SA_MODULE_ID分组,但同时也要获取其他字段(SA_ORG_MODULES.SA_MODULE_NAME,ATI_MODULES.MODULE_NAME_BN,ATI_MODULES.MODULE_ICON, ATI_MODULES.CATEGORY)。在GROUP BY查询中,Oracle坚持认为,检索到的值要么是出现在GROUP BY语句中的字段,要么是诸如SUM,{{1}之类的聚合函数的结果。 }等。其他数据库不强制执行此要求。因此,您的查询完全有可能在MySQL中运行,并在Oracle中引发异常。