簡體   English   中英

基於連接表對 postgres 中的行進行排序 - Rails

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM