[英]Sorting rows in postgres based on joined table - Rails
我有以下情況
class Book
has_many :book_publications
has_many :publications, through: :book_publications
end
class BookPublication
# book_id
# publication_id
end
class Publication
# date
end
Book1 | Publication1(2000)
Book1 | Publication2(2003)
Book2 | Publication3(2004)
Book2 | Publication4(1999)
我想根據第一次出版日期對書籍進行排序,而不關心其他日期。 因此,對於升序,我將使用 Book2(1999)、Book1(2000) 和降序 Book1(2000)、Book2(1999)。 晚年不應計入此查詢。 基本上,我需要找到每本書出版的第一年,以某種方式將其附加到查詢中並按此排序。 我還需要仍然能夠展示沒有出版物的書籍。 所以我不能做一個連接來只獲取匹配的行。
class Book
has_many :book_publications
has_many :publications, through: :book_publications
def self.order_by_publication_date
left_joins(:publications)
.group(:id)
.order(Publication.arel_table[:date].minimum, :asc)
end
end
如果您想要結果集中的日期,您可以選擇它:
class Book < ApplicationRecord
has_many :book_publications
has_many :publications, through: :book_publications
def self.order_by_publication_date
left_joins(:publications)
.select(
arel_table[Arel.star],
Publication.arel_table[:date].minimum.as('publication_date')
)
.group(:id)
.order(:publication_date, :asc)
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.