【发布时间】:2011-10-02 19:33:03
【问题描述】:
我有三个这样的表:
messages
user_id | message
2 | 'foo'
3 | 'bar'
blacklists
user_id | blacklister_id
1 | 2
users
id | name
1 | 'me'
2 | 'blacklister'
3 | 'my friend'
我是 - 来自表用户的 id:1 用户。我不想看到来自我添加到黑名单的用户的消息(我在黑名单中添加了 id:2 的用户)。 如何在一个查询中显示一条没有来自黑名单用户(user_id:2)的消息?
现在我在 Rails 中这样做:
@all_messages = Message.all
@filter_messages = Array.new
for message in @all_messages
@blacklist = Blacklist.where("user_id = ? and blacklister_id = ?",current_user.id,message.user_id).first
if @blacklist.nil?
@messages << message
end
end
return @messages
这真的很糟糕,我想知道如何使用一个 postgresql 查询来重构它。
【问题讨论】:
标签: sql ruby-on-rails postgresql inner-join outer-join