Kohana ORM, переписывающий запрос ORDER BY и GROUP BY - PullRequest
1 голос
/ 13 февраля 2012

Мне нужно получить список статей, отсортированных по последнему комментарию из связанной таблицы, объединенной на article.id = message.article_id с использованием Kohana ORM.Мне удалось построить запрос, который ГРУППА, и только затем ЗАКАЗЫ:

SELECT * 
FROM  `articles` 
LEFT JOIN  `comments` ON (  `articles`.`id` =  `comments`.`article_id` ) 
GROUP BY  `comments`.`item_id` 
ORDER BY  `datetime` DESC 

Запрос, который я пытаюсь построить:

SELECT * FROM `articles` LEFT JOIN 
(SELECT article_id, MAX(datetime) as datetime FROM comments GROUP BY (article_id)) 
AS b ON `articles`.`id` = b.`article_id` 
ORDER BY datetime 

Я понятия не имею, как переписать его в KohanaORM ... (и я не могу избежать ORM, потому что от него зависит масса кода)

Ответы [ 2 ]

3 голосов
/ 13 февраля 2012
$subquery = DB::select('article_id', array('MAX("datetime")','datetime'))
    ->from('comments')
    ->group_by('article_id');

$s = ORM::factory('article')
    ->join(array($subquery, 'b'), 'LEFT')
    ->on('article.id','=','b.article_id')
    ->order_by('datetime')
    ->find_all();

Это перевод вашего запроса, я не совсем уверен, будет ли он работать

1 голос
/ 13 февраля 2012
ORM::factory('article')->join('comments', 'LEFT')->on('article.id', '=', 'comments.article_id')->group_by('comments.id')->order_by('date', 'DESC')->find_all()->as_array();

Это генерирует sql как:

SELECT article. * ОТ articles AS article ВЛЕВО СОЕДИНЯЕТСЯ comments ВКЛ (article. id = comments. article_id) GROUP BY comments. id ORDER BY date DESC

, что соответствует вашему первому запросу.

Я не уверен, какиспользуйте вложенный запрос в ORM, но в кохане есть построитель запросов , который должен помочь вам.

...