如何使用Codeigniter计算组中的项目?

时间:2012-02-24 10:22:27

标签: mysql codeigniter activerecord count blogs

我使用活动记录返回日期的分组列表,其中包含以下代码:

function get_archive_links(){

        $this->db->order_by('date','desc');
        $this->db->group_by('MONTH(date), YEAR(date)');
        $query = $this->db->get('blog'); 

    foreach ($query->result() as $row) {
        $data[] = array(
            'id' => $row->id,
            'date' => $row->date
        );
    }

    return $data;
}

当我在页面上循环并回显时返回:

  • 2012年2月
  • 2012年1月
  • 2012年12月

如何计算组中的每个项目并将其显示在列表中?例如:

  • 2012年2月(2)
  • 2012年1月(6)
  • 2012年12月(7)

我将计算每个月有多少博客帖子。

4 个答案:

答案 0 :(得分:2)

您需要删除GROUP BY然后在PHP中计数,或者在您的AR查询中添加->select('COUNT(id) AS num_posts')。我可能会添加->select(),因为它的工作量较少:)

答案 1 :(得分:1)

你可以使用sql count函数。如果您正在使用group by,则count函数返回行组的计数行。

像这样,

function get_archive_links(){
    $this->db->select("count(*) as count, blog.*);
    $this->db->order_by('date','desc');
    $this->db->group_by('MONTH(date), YEAR(date)');
    $query = $this->db->get('blog'); 

    foreach ($query->result() as $row) {
        $data[] = array(
            'id' => $row->id,
            'date' => $row->date,
            'count' => $row->count
        );
    }

return $data;

}

答案 2 :(得分:0)

这种方法很完美,但如果不存在类别

,则不会显示零计数

这是我的功能,

function get_category_list()
{
    $this->db->select("count(*) as num_posts,cb_category.*");
    $this->db->where_in('cb_post.city', $city_ids);
    $this->db->join('cb_posts', 'cb_post.category = cb_category.cat_id or cb_post.parent = cb_category.cat_id', 'left');

    $this->db->order_by('cat_name_en', 'ASC');

    $this->db->group_by('cb_category.cat_id');

    $query = $this->db->get('cb_category');

}

答案 3 :(得分:0)

SELECT
  categories.*,
  COUNT(posts.category_id) AS `count`
FROM
  (categories
LEFT JOIN
    posts 
ON posts.category_id = categories.category_id)
GROUP BY
  Category_name;

我得到零计数问题的答案。