sql >> データベース >  >> RDS >> Mysql

Rails ActiveRecordは、結合テーブルの関連付けの数で並べ替えます

    次のことを試してください:

    @resources = Resouce.select("resources.*, COUNT(votes.id) vote_count")
                        .joins(:votes)
                        .where(language_id: "ruby")
                        .group("resources.id")
                        .order("vote_count DESC")
    
    @resources.each { |r| puts "#{r.whatever}  #{r.vote_count}" }
    

    投票数が0のリソースを含めるには、外部結合を使用します。以下の例がそのまま機能しない場合は、正しい関係で結合するように結合ステートメントを変更する必要があります。

    @resources = Resource.select("resources.*, COUNT(votes.id) vote_count")
                         .joins("LEFT OUTER JOIN votes ON votes.votable_id = resources.id AND votes.votable_type = 'Resource'")
                         .where(language_id: "ruby")
                         .group("resources.id")
                         .order("vote_count DESC")
    


    1. SQL Server(T-SQL)でのPATINDEX()関数のしくみ

    2. MySQL-フィールドのデフォルト値を文字列連結関数として設定します

    3. タグの正確なセット(多対多の関係)を持つ投稿を見つけるためにクエリを実行します

    4. Oracle 11gのオブジェクトタイプ列から選択するにはどうすればよいですか?