Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Rails ActiveRecord sortuje według liczby skojarzeń łączenia tabel

Wypróbuj następujące:

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

Aby uwzględnić zasoby z 0 głosami, użyj sprzężenia zewnętrznego. Jeśli poniższy przykład nie działa tak, jak jest, będziesz musiał zmienić instrukcję joins, aby połączyć się w odpowiednich relacjach.

@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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Odzyskaj hasło roota MySQL

  2. Jak wyprowadzić dane przy użyciu $stmt->fetch(PDO::FETCH_ASSOC);

  3. Jak radzić sobie z awariami bazy danych (Glassfish/MySQL)?

  4. Zatrzymaj zapytanie przez pdo

  5. Błąd MySQL — niezsynchronizowane polecenia; nie możesz teraz uruchomić tego polecenia