Kohana ORM,重写ORDER BY和GROUP BY查询

时间:2012-02-13 10:57:16

标签: mysql orm kohana

我需要获取一个文章列表,这些文章按照使用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,因为有大量代码依赖于它)

2 个答案:

答案 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。* FROM articles AS article LEFT JOIN comments   ON(articleid = commentsarticle_id)GROUP BY commentsid   ORDER BY date DESC

与您的第一个查询匹配。

我不确定如何在ORM中使用嵌套查询,但在kohana中有Query builder可以帮助你。