【发布时间】:2016-11-22 07:31:39
【问题描述】:
我需要收集用户最近的广播标签。
我已经设置了这些模型
class Broadcast < AR::Base
belongs_to :user
has_many :broadcast_tags
has_many :tags, through: :broadcast_tags
end
class Tag < AR::Base
has_many :broadcast_tags
has_many :broadcasts, through: :broadcast_tags
end
class BT < AR::Base
belongs_to :broadcast
belongs_to :tag
end
我想从上个月的用户广播中查找标签
我想我需要加入广播来标记,然后找到这些广播中使用的所有标签
Tag.joins(:broadcasts).where(
broadcasts: { user_id: current_user.id, created_at: Time.current.all_month }
)
如果用户在多个最近的广播中使用了单个标签,这会多次返回它们。我只想收到不同的标签。如果我只是调用 distinct,哪个当然可以。
Tag.joins(:broadcasts).where(
broadcasts: { user_id: current_user.id, created_at: Time.current.all_month }
).distinct
我还需要按照它们在广播中出现的顺序对这些不同的标签进行排序。
如果
- 最后一个广播有标签10、9、6、1
- 倒数第二个有标签 9、2、1
我希望标签按此顺序退回
10、9、6、1、2
我试过.order('broadcasts.created_at DESC') 抱怨for SELECT DISTINCT, ORDER BY expressions must appear in select list
【问题讨论】:
标签: sql ruby-on-rails postgresql sql-order-by distinct