Kohana 3 ORM:获得最重复的值,排名并插入新对象 /数组
-
24-10-2019 - |
题
所以,我系列的Kohana 3 Orm问题的另一个问题:)
从本质上讲,我有一个枢轴表,称为 connections
. 。这 connections
表连接a song
到 keyword
. 。这一切都很棒,而且工作了(感谢我的最后两个问题!)
我想通过关键字输出最连接的歌曲。所以,要以某种方式查询我的 connections
表和输出对象(任意迭代数量有限 $n
)按照它们连接的次数对歌曲进行排名。该特定的次数 song_id
出现在那个特定的 keyword_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的内部工作。
我假设您使用的是一个名为“歌曲”的模型,链接到“歌曲”表,链接到“关键字”表的“关键字”模型以及在“连接”表'表' '分别为每个模型。
不隶属于 StackOverflow