Kohana 3 ORM:获取重复次数最多的值,进行排序,并插入到新对象/数组中

Kohana 3 ORM:获取重复次数最多的值,进行排序,并插入到新对象/数组中,orm,kohana-3,kohana-orm,Orm,Kohana 3,Kohana Orm,所以,在我的Kohana 3 ORM系列问题中,还有一个问题:) 基本上,我有一个数据透视表,叫做连接。连接表将歌曲连接到关键字。这一切都很好,很有效(感谢我的最后两个问题!) 我想按关键字输出连接最多的歌曲。因此,以某种方式查询我的连接表并输出一个对象(具有任意限制的迭代次数$n),该对象根据歌曲连接的次数对歌曲进行排序,即特定的歌曲id针对特定的关键字id显示的次数 如果不查询每一行(!!!),然后在数组中计算这些单独的结果,我真的不知道如何实现这一点。。。。必须有一种更优雅的方法来实现这一

所以,在我的Kohana 3 ORM系列问题中,还有一个问题:)

基本上,我有一个数据透视表,叫做
连接
连接
表将
歌曲
连接到
关键字
。这一切都很好,很有效(感谢我的最后两个问题!)

我想按关键字输出连接最多的歌曲。因此,以某种方式查询我的
连接
表并输出一个对象(具有任意限制的迭代次数
$n
),该对象根据歌曲连接的次数对歌曲进行排序,即特定的
歌曲id
针对特定的
关键字id
显示的次数


如果不查询每一行(!!!),然后在数组中计算这些单独的结果,我真的不知道如何实现这一点。。。。必须有一种更优雅的方法来实现这一点?

我认为这更像是一个SQL问题。使用DB查询生成器:

DB::select('songs.*')->select(array('COUNT("keywords.id")', 'nconnections'))
  ->from('songs')
  ->join('connections', 'LEFT')->on('connections.song_id', '=', 'songs.id')
  ->join('keywords', 'LEFT')->on('connections.keyword_id', '=', 'keywords.id')
  ->group_by('songs.id')
  ->order_by('nconnections')
  ->as_object('Model_Song')
  ->execute();
或者在SQL中

SELECT `songs`.*, COUNT(`keywords`.`id`) AS `nconnections` FROM songs
  LEFT JOIN `connections` ON `connections`.`song_id` = `songs`.`id`
  LEFT JOIN `keywords` ON `connections`.`keyword_id` = `keywords`.`id`
GROUP BY `songs`.`id` ORDER BY `nconnections`
应该返回您想要的结果

您希望在歌曲模型中有一个名为
nconnections
的可访问属性。最简单的方法是添加一个公共成员,这样就不会干扰ORM的内部工作


我假设您使用的是一个名为“Song”的模型,链接到“songs”表,一个链接到“keywords”表的“Keyword”模型,在“connections”表中,每个模型分别使用外键“Song_id”和“Keyword_id”