所以,我系列的Kohana 3 Orm问题的另一个问题:)

从本质上讲,我有一个枢轴表,称为 connections. 。这 connections 表连接a songkeyword. 。这一切都很棒,而且工作了(感谢我的最后两个问题!)

我想通过关键字输出最连接的歌曲。所以,要以某种方式查询我的 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的内部工作。


我假设您使用的是一个名为“歌曲”的模型,链接到“歌曲”表,链接到“关键字”表的“关键字”模型以及在“连接”表'表' '分别为每个模型。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top