Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 16 окт 2019, 13:26

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Подсчет статей в категориях
СообщениеДобавлено: 27 мар 2012, 15:09 
Не в сети
Новичок

Зарегистрирован: 27 мар 2012, 14:58
Сообщения: 15
Доброго времени суток =)

Имеется контроллер:
Код:
$categories = Model::factory('category')->categories();

$content = View::factory('index/v_main', array(
  'categories' => $categories,
)
);


Модель Category:
Код:
public function categories()
{
  $query = DB::select()->from('category')->order_by('name', 'DESC');
  return $query->execute();
}


Таблица category:
Код:
CREATE TABLE IF NOT EXISTS `category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


Вид v_main:
Код:
<? foreach ($categories as $category): ?>
<div class="main">
<?=HTML::anchor('category/'.$category['id'], $category['name'])?> [0]
</div>
<? endforeach ?>


Таблица article:
Код:
CREATE TABLE IF NOT EXISTS `article` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_cat` int(11) NOT NULL,
  `text` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;


Подскажите как сделать подсчет статей в категориях?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подсчет статей в категориях
СообщениеДобавлено: 28 мар 2012, 02:29 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
Я лично в подобных случаях добавлял в таблицу категорий поле "Количество статей".Соответственно при добавлении статьи идет инкремент в это поле, а при удалении -декремент. Но это мне надо было на одной странице знать количество статей во всех категориях. Если такое не требуется, то можно стандартно, через count.

_________________
kohanaframework.su - обучение фреймворку Kohana


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подсчет статей в категориях
СообщениеДобавлено: 28 мар 2012, 02:43 
Не в сети
Новичок

Зарегистрирован: 27 мар 2012, 14:58
Сообщения: 15
admin писал(а):
Я лично в подобных случаях добавлял в таблицу категорий поле "Количество статей".Соответственно при добавлении статьи идет инкремент в это поле, а при удалении -декремент. Но это мне надо было на одной странице знать количество статей во всех категориях. Если такое не требуется, то можно стандартно, через count.


Можете показать пример как это реализовать через count?
А то как ни пытался - не получается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подсчет статей в категориях
СообщениеДобавлено: 28 мар 2012, 16:22 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
Ну вот для комментариев, например, я пишу так:

Код:
   //Получение количества комментариев
   public function countComments($article_id)
   {
        $count = DB::select(DB::expr('COUNT(`id`) AS mycount'))
            ->from('comments')
            ->where('article_id', '=', $article_id);               
            
      $count = $count->execute()->get('mycount');            
      return $count;
   }


если необходимо исключить повторяющиеся значения при подсчете, можно использовать DISTINCT, хотя тут ненадо, но мало ли понадобится ) Что-то вроде
Код:
      $count = DB::select(DB::expr('COUNT(DISTINCT `id`) AS mycount'))
            ->from('articles')
                         .....

Обычно требуется, когда вы объединяете таблицы, используя JOIN.

_________________
kohanaframework.su - обучение фреймворку Kohana


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подсчет статей в категориях
СообщениеДобавлено: 28 мар 2012, 16:40 
Не в сети
Новичок

Зарегистрирован: 27 мар 2012, 14:58
Сообщения: 15
Модель у меня подобным образом и реализована, но вот не могу понять как передать $id_article в контроллере :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подсчет статей в категориях
СообщениеДобавлено: 28 мар 2012, 17:07 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
Хм. А в чем проблема-то ? Ну допустим
Код:
$comment = new Model_Comment();
$count = $comment->countComments($article_id);


А сам $article_id - это ид статьи, его мы получаем обычно из адреса.
Код:
$article_id = $this->request->param('id');


Это пример для подсчета комментариев к статье с определенным ид. У вас надо определить ид категории, чтобы потом подсчитать статьи, которые к ней относятся (связь один ко многим). Я не знаю, как у вас все реализовано, но в адресной строке вы же наверняка что-то передаете.

_________________
kohanaframework.su - обучение фреймворку Kohana


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подсчет статей в категориях
СообщениеДобавлено: 28 мар 2012, 21:29 
Не в сети
Новичок

Зарегистрирован: 27 мар 2012, 14:58
Сообщения: 15
admin писал(а):
Хм. А в чем проблема-то ? Ну допустим
Код:
$comment = new Model_Comment();
$count = $comment->countComments($article_id);


А сам $article_id - это ид статьи, его мы получаем обычно из адреса.
Код:
$article_id = $this->request->param('id');


Это пример для подсчета комментариев к статье с определенным ид. У вас надо определить ид категории, чтобы потом подсчитать статьи, которые к ней относятся (связь один ко многим). Я не знаю, как у вас все реализовано, но в адресной строке вы же наверняка что-то передаете.


Вы не поняли.
Я про то, когда выводим все категории.

В этом контроллере:
Код:
$categories = Model::factory('category')->categories();

$content = View::factory('index/v_main', array(
  'categories' => $categories,
)
);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подсчет статей в категориях
СообщениеДобавлено: 29 мар 2012, 02:02 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
Выводятся все категории и нужно посчитать, сколько в каждой статей ? Тогда проще, как я говорил, сделать поле в категориях - Количество статей. Потому что для каждой вызывать запрос нерентабельно.

_________________
kohanaframework.su - обучение фреймворку Kohana


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подсчет статей в категориях
СообщениеДобавлено: 29 мар 2012, 02:28 
Не в сети
Новичок

Зарегистрирован: 27 мар 2012, 14:58
Сообщения: 15
admin писал(а):
Выводятся все категории и нужно посчитать, сколько в каждой статей ? Тогда проще, как я говорил, сделать поле в категориях - Количество статей. Потому что для каждой вызывать запрос нерентабельно.


Ну а все же как реализовать с вызыванием запросов на подсчет? :geek:

P.S. Для личного развития :)
Например: для подсчета новых статей, в таблице со статьями имеется поле времени добавления.


Последний раз редактировалось Malik 29 мар 2012, 02:35, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подсчет статей в категориях
СообщениеДобавлено: 29 мар 2012, 02:34 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
ну видимо для каждой категории вызывать
Цитата:
$count = DB::select(DB::expr('COUNT(`id`) AS mycount'))
->from('comments')
->where('article_id', '=', $article_id);


передавая каждый раз новое $article_id

_________________
kohanaframework.su - обучение фреймворку Kohana


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group