sql >> Databasteknik >  >> RDS >> Mysql

Rails ActiveRecord sorteras efter antal anslutningar till tabeller

Prova följande:

@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}" }

För att inkludera resurser med 0 röster, använd en yttre koppling. Om exemplet nedan inte fungerar som det är måste du ändra joins-satsen för att ansluta till de korrekta relationerna.

@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. MySQLdb Python infoga %d och %s

  2. problem med att ansluta till fjärr-mysql-databas med php

  3. Vad är standardnamnet för begränsningar i SQL Server?

  4. lagras i mysql-fältet men ingen radbrytning vid eko