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

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 29 мар 2024, 17:09

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




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: запрос к БД
СообщениеДобавлено: 13 дек 2012, 02:54 
Не в сети
Зеленый

Зарегистрирован: 13 дек 2012, 02:45
Сообщения: 2
Здравствуйте!

Возникла проблема:
есть 2 таблицы

incident (id, incident_description)
comment (id, incident_id, comment_description)

остальные поля опустил, пока они не важны

Необходимо вывести события отсортированные по количеству комментариев, в порядке убывания.
Вот SQL запрос:
Код:
SELECT incident.*, COUNT(comment.id) AS com 
FROM incident
LEFT JOIN comment ON comment.incident_id=incident.id
GROUP BY incident.id
ORDER BY com DESC



Однако я теряюсь как это сделать через ORM. Читал, что count() там работает через "не хочу".

Буду весьма благодарен за любую помощь.

P.S. Простой запрос ORM на вывод событий по определенной категории выглядит так:
Код:
$content->incidents = ORM::factory('incident')
         ->with('location')
         ->join('incident_category', 'incident.id', 'incident_category.incident_id')
         ->where('incident_active', '1')
         ->where('category_id', $category_id)
         ->limit('10')
         ->orderby('incident_date', 'desc')
         ->find_all();


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запрос к БД
СообщениеДобавлено: 14 дек 2012, 01:20 
Не в сети
Бывалый

Зарегистрирован: 29 сен 2012, 00:30
Сообщения: 65
Откуда: Рига, Латвия
По мотивам этого ответа: http://stackoverflow.com/a/2283412
Запрос:
Код:
SELECT incident.*
  FROM incident
  JOIN (
    SELECT count(comment.id) AS c, comment.incident_id
      FROM comment
      GROUP BY comment.incident_id
    ) com
    ON com.incident_id=incident.id
  ORDER BY com.c DESC

Я думаю, что лучше всего делать через простой запрос (не query builder или ORM), если вам нужноподставлять какие-то значения, то используйте http://kohanaframework.org/3.3/guide/da ... ameterized
Код:
  
$query = DB::query(Database::SELECT, 'здесь запрос');
$result = $query->as_object('Model_Incident')->execute();             

метод as_object обернет все полученные записи(ряды) в объект класса 'Model_Incident', т.е. вы сможете дальше спокойно использовать ORM.
Надеюсь помог, если есть синтаксические ошибки или другие непонятки - пишите, разберем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запрос к БД
СообщениеДобавлено: 17 дек 2012, 00:25 
Не в сети
Зеленый

Зарегистрирован: 13 дек 2012, 02:45
Сообщения: 2
Код:
Fatal error: Class 'DB' not found in /var/www/ushahidi/themes/112_cloud/hooks/register_commented_blocks.php on line 37


проблема в том, что это Кохана версии 2, и прикручена к платформе Ushahidi :(


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

Зарегистрирован: 29 сен 2012, 00:30
Сообщения: 65
Откуда: Рига, Латвия
это следовало указать в первом предложении первого сообщения. Сечас нет времени лезть в документацию по 2й версии, но я вижу 2 варианта:
1) найти способ просто выполнить запрос, который я написал выше.
2) подключить модуль Database из 3й версии, по идее он должел легко подключиться.
Хотя если честно, про 2ю версию мало что знаю - начал работу с коханой с версии 3.2


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

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


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

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


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

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