【问题标题】:How to count items in group with Codeigniter?如何使用 Codeigniter 计算组中的项目?
【发布时间】:2012-02-24 10:22:26
【问题描述】:

我正在使用活动记录返回具有以下代码的分组日期列表:

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)

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

【问题讨论】:

    标签: mysql codeigniter activerecord count blogs


    【解决方案1】:

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

    【讨论】:

    • 不太明白,:-(如果可能的话,你能稍微扩展一下吗,谢谢你的帮助。
    • 在函数的第一行添加$this->db->select('COUNT(id) AS num_posts');,然后在你的foreach循环中添加'num_posts' => $row->num_posts
    • 我刚刚得到了很多未定义的属性:stdClass::$id。
    • id替换为您的主键列的名称(与每篇博文关联的唯一ID)
    • id 是我的主键列的名称:-|
    【解决方案2】:

    您可以使用 sql 计数功能。如果您使用 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;
    

    }

    【讨论】:

    • levye 我如何写这个来使用模型和控制器而不是视图?
    【解决方案3】:

    这很完美,但如果类别不存在帖子,则不会显示零计数

    这是我的功能,

    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');
    
    }
    

    【讨论】:

      【解决方案4】:
      SELECT
        categories.*,
        COUNT(posts.category_id) AS `count`
      FROM
        (categories
      LEFT JOIN
          posts 
      ON posts.category_id = categories.category_id)
      GROUP BY
        Category_name;
      

      我已经找到了零计数问题的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-07
        • 2016-06-24
        • 1970-01-01
        • 1970-01-01
        • 2018-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多