按许多关系的第一个记录对表进行排序

时间:2017-09-22 10:54:07

标签: sql ruby-on-rails postgresql

我有:

Book
  has_many :book_authors
  has_many :authors, through: :book_authors

BookAuthor
  belongs_to :author
  belongs_to :book

Author
  has_many :book_authors 

所以我可以列出多位作者的书籍

books list

我想按第一作者的名字对书籍进行排序。

sorted by first author name

有什么办法吗?

3 个答案:

答案 0 :(得分:2)

只有当所有书籍都有作者时,这才有效。否则,没有作者的书籍将不会出现

Book.joins(:authors).order('authors.name desc')

答案 1 :(得分:1)

您将接受查询并添加:

order by authors

这将按列表中第一位作者的名字排序。

答案 2 :(得分:1)

您可以在作者name列上使用汇总功能:

Book.left_outer_joins(:authors).group("books.id").order("MIN(authors.name)")

@Pragash的解决方案Book.joins(:authors).order('authors.name desc')如果有很多作者,则会多次返回相同的书籍。但是,使用.distinct会返回独特的图书。

Book.left_outer_joins(:authors).order('authors.name').distinct