Kohana 3 orm:ほとんどの繰り返しの値を取得し、ランク付けし、新しいオブジェクト /配列に挿入します
-
24-10-2019 - |
質問
だから、私の一連のコハナ3 ormの質問のもう1人:)
私は本質的に、ピボットテーブルを持っています。 connections
. 。 connections
テーブルはaを接続します song
に keyword
. 。それはすべて素晴らしいです(私の最後の2つの質問のおかげです!)
キーワードで最も接続された曲を出力したいと思います。だから、どういうわけか私を照会する 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の内側の仕組みを改ざんしないように公開メンバーを追加することです。
「Song」テーブルにリンクされた「Song」と呼ばれるモデル、「キーワード」テーブルにリンクされた「キーワード」モデル、「接続」テーブル外部キー 'Song_id'および 'keyword_idを使用していると思います。 'それぞれ各モデルについて。
所属していません StackOverflow