Kohana 3 orm:ほとんどの繰り返しの値を取得し、ランク付けし、新しいオブジェクト /配列に挿入します

StackOverflow https://stackoverflow.com/questions/4797883

  •  24-10-2019
  •  | 
  •  

質問

だから、私の一連のコハナ3 ormの質問のもう1人:)

私は本質的に、ピボットテーブルを持っています。 connections. 。 connections テーブルはaを接続します songkeyword. 。それはすべて素晴らしいです(私の最後の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を使用していると思います。 'それぞれ各モデルについて。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top