我需要获取一个文章列表,这些文章按照使用Kohana ORM在article.id = message.article_id上加入的相关表中的最新评论进行排序。我设法构建了一个GROUPS的查询,然后只有ORDERS:
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
我不知道如何将其重写为Kohana ORM ...(我无法避免使用ORM,因为有大量代码依赖于它)
答案 0 :(得分:3)
$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 :(得分:1)
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 as:
SELECT
article
。* FROMarticles
ASarticle
LEFT JOINcomments
ON(article
。id
=comments
。article_id
)GROUP BYcomments
。id
ORDER BYdate
DESC
与您的第一个查询匹配。
我不确定如何在ORM中使用嵌套查询,但在kohana中有Query builder可以帮助你。