Как посчитать неограниченную вложенность?

Рейтинг: 0Ответов: 1Опубликовано: 10.07.2011

У меня есть категории и подкатегории, но у каждой подкатегории есть ещё подкатегория, следующий код считает кол-во страниц из категории root, и её подкатегорий, как мне посчитать кол-во страниц из подкатегорий подкатегории?

//Виджет статистики
public function show_stats($widget = array())
{
    //Получаем все подкатегории
    $categ = $this->db->query("SELECT id,parent_id FROM category WHERE parent_id=".$widget['settings']['category'])->result_array();
    //Считаем страницы каждой категории
    $this->db->select('id,category');
    $this->db->where('category',$widget['settings']['category']);
    foreach($categ as $row) {
        $this->db->or_where('category',$row['id']);
    }
    $query = $this->db->get('content');
    return $this->template->display('widgets/'.$widget['name'], array('widget' => $widget,'stats' => $query->result_array()));
}

Структура category
id,parent_id,name

Структура content
id,category,title,text

$widget['settings']['category'] = 0

Как посчитать неограниченную вложенность?

Ответы

▲ 2

Если я правильно понял, то у таблицы category есть не только parent_id, но и id, тогда, чтобы получить кол-во записей для коневой категории и категорий уровнем ниже, подойдет запрос:

SELECT COUNT(*)
FROM content
INNER JOIN category ON category.id = content.category
WHERE
    (content.category = 0) OR -- Все записи связанные с категорией 0
    (category.parent_id = 0)  -- Все записи связанные с дочерними категориями от 0