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