仅计算Codeigniter 3中所有类别的活动项目

时间:2017-11-21 16:36:27

标签: select join count codeigniter-3

在Codeignitor3.1.6中,我有两个表 - 类别和项目。我想列出所有类别的项目计数(有效='仅限1')。例如,我有6个类别,并希望显示所有这些类别,即使它们的计数为零,如下所示:

  • 第1类(5)
  • 类别2(13)
  • 类别3(0)
  • 类别4(30)
  • 类别5(0)
  • 类别6(3)

这是我的模特:

public function count_items()
{
    $q = $this->db->select('categories.name, COUNT(items.id) as xx')
    ->from('categories')
    ->join('items', 'categories.id = items.category_id', 'left')
    ->group_by('categories.name')->get();

    return $q;
}

我想只计算items.active =' 1',但如果我使用 - > where(' items.active',' 1') ,该清单错过了第3类和第5类。 请告知如何实现这一目标。

1 个答案:

答案 0 :(得分:0)

我有一点玩这个。

您看到这些结果的原因是由于该类别的非现有项目没有条目,因此测试items.active = 1会导致NULL。

所以我添加了一个处理那个的地方,即or_where('items.active',NULL)

我创建了一个新函数(用于与原始函数一起测试)并添加此额外命令可以处理...

所以你的功能变成......

// Original count_items() with added or_where() 
public function count_items_active()
{
    $q = $this->db->select('categories.name, COUNT(items.id) as xx')
        ->from('categories')
        ->join('items', 'categories.id = items.category_id', 'left')
        ->where('items.active',1)
        ->or_where('items.active',NULL)
        ->group_by('categories.name')
        ->get();
    return $q;
}