计数结果由Codeigniter中的distinct()或group_by()过滤

时间:2013-05-04 21:16:17

标签: php database codeigniter postgresql

我想用CI计算我的活动记录查询结果(使用postgreSQL)。我使用的是count_all_results(),适用于大多数查询,但在加入后使用distinct()group_by()时则不行,因为count_all_results()会忽略这些功能。

这是一个修复版本,它尚未在newsest(2.1.3)稳定版本中实现。 https://github.com/EllisLab/CodeIgniter/commit/b05f506daba5dc954fc8bcae76b4a5f97a7433c1

当我尝试在当前版本中尝试实现此修复时,没有进行额外的过滤。行数保持不变。

有关如何在当前版本中实施此功能的任何提示,或其他方式来计算按distinct()group_by()过滤的结果?

3 个答案:

答案 0 :(得分:6)

    $this->db->select('COUNT(id)');
    $this->db->join();
    $this->db->distinct();
    $this->db->group_by();
//...etc ...
    $query = $this->db->get('mytable');

    return count($query->result()); 

    $this->db->join();
    $this->db->distinct();
    $this->db->group_by();
//...etc ...
    $query = $this->db->get('mytable');

    return $query->num_rows(); 

答案 1 :(得分:1)

您可以使用

$this->db->group_by();

,否则

$this->db->distinct();

答案 2 :(得分:0)

在我的情况下,从今天开始使用Codeigniter 3.1.11,在进行count_all_results()时要考虑distinct() 。但是,您必须使用该函数,先执行$ this-> db-> select(“ distinct x”)然后进行计数,才不会将DISTINCT限制应用于记录计数。