Как считать вещи в группе с Codeigniter? - PullRequest
1 голос
/ 24 февраля 2012

Я использую активную запись для возврата сгруппированного списка дат со следующим кодом:

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
  • Январь 2012
  • Декабрь 2012

Как можно подсчитать каждый элемент в группе и отобразить его в моем списке?Пример:

  • Февраль 2012 (2)
  • Январь 2012 (6)
  • Декабрь 2012 (7)

Я будусчитая, сколько сообщений в блоге там, где за каждый месяц.

Ответы [ 4 ]

2 голосов
/ 24 февраля 2012

Вам нужно либо удалить GROUP BY, а затем считать в PHP, либо добавить ->select('COUNT(id) AS num_posts') к вашему AR-запросу.Я бы, наверное, добавил ->select(), так как это меньше работы:)

1 голос
/ 24 февраля 2012

Вы можете сделать это с помощью функции подсчета 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;

}

0 голосов
/ 22 ноября 2017
SELECT
  categories.*,
  COUNT(posts.category_id) AS `count`
FROM
  (categories
LEFT JOIN
    posts 
ON posts.category_id = categories.category_id)
GROUP BY
  Category_name;

У меня есть ответ на вопрос с нулевым счетом.

0 голосов
/ 04 ноября 2015

Работает отлично, но не показывает ноль, если не существует сообщений для категории

вот моя функция,

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

}
...