Хочу исключить из запроса некоторые записи, но я не знаю, как - PullRequest
2 голосов
/ 11 июля 2011

У меня есть три таблицы, подобные этой:

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.

1 Ответ

2 голосов
/ 11 июля 2011
select *
from messages m
inner join users u on m.user_id = u.id
left outer join blacklists b on u.id = b.user_id
where b.user_id is null
...