1

我正在使用 Codeigniter 并尝试将 Active Record 类用于我的所有数据库操作。

但是,在尝试将以下(工作)查询的最后出价转换为 Active Record 代码时,我确实遇到了问题。

$sql = ("SELECT ac.cou_id
         FROM authorcourse ac
         INNER JOIN course c
         ON ac.cou_id = c.cou_id
         WHERE cou_name = ? // ? = $cou_name
         AND cou_number = ? // ? = $cou_number
         AND cou_term = ? // ? = $cou_term
         AND cou_year = ? // ? = $cou_year
         AND FIND_IN_SET (ac.aut_id, ?) //? = $aut_ids_string
         GROUP BY ac.cou_id
         HAVING COUNT(DISTINCT ac.aut_id) = ? //? = $aut_quantity
         AND COUNT(DISTINCT ac.aut_id) = (SELECT COUNT(DISTINCT ac2.aut_id)
                                          FROM authorcourse ac2 
                                          WHERE ac2.cou_id = ac.cou_id)");
 $query = $this->db->query($sql, array($cou_name, $cou_number, $cou_term, $cou_year, $aut_ids_string, $aut_quantity));  

问题:如何将 HAVING 子句转换为有效的 Active Record 代码?我尝试使用 $this->db->having(); 和 $this->db->distinct(); 但未能结合功能以达到预期的效果。

到目前为止我的(工作)代码:

$this->db->select('ac.cou_id');
$this->db->from('authorcourse ac');
$this->db->join('course c', 'c.cou_id = ac.cou_id');
$this->db->where('cou_name', $cou_name);
$this->db->where('cou_number', $cou_number);
$this->db->where('cou_term', $cou_term);
$this->db->where('cou_year', $cou_year);
$this->db->where_in('ac.aut_id',$aut_ids);  
$this->db->group_by('ac.cou_id');
// missing code

非常感谢!

4

1 回答 1

0

你的代码看起来很笨拙。但是,您可以通过以下方式使用 having 子句:

$this->db->having("ac.aut_id = '".$aut_qty."'", null, false)
于 2013-04-30T16:53:11.990 回答