2015-01-22 2 views
0

Прежде всего, я должен извиниться за плохую тему. У меня не было лучшей идеи.PostgreSQL выбрать запрос с подзапросом

Для моего внутреннего обмена сообщениями на моем веб-страницы У меня есть следующие таблицы:

messages (id, subject, owner_id) 
messages_recipients (id, recipient_id, message_id) 

Мне нужно, чтобы все сообщения для конкретного пользователя с одним дополнительным полем, которое содержит все получатели идентификаторов для конкретного сообщения.

Например:

messages: 
id | subject | owner_id 
1 | test 1 | 1 
2 | test 2 | 2 

messages_recipients: 
id | recipient_id | message_id 
1 | 10   | 1 
2 | 11   | 1 
3 | 10   | 2 

Ожидаемый результат (сообщения для пользователя 10):

message_id, subject, all users that receive message with this id 
1,   test 1, 10;11; 
2,   test 2, 10; 

Я хочу, чтобы перечислить все сообщения для конкретного пользователя. Для ответа на реализацию все мне также нужна информация, которую пользователи получают конкретным сообщением.

ответ

1

Думаю, что это будет делать:

SELECT r.message_id,subject,string_agg(r.recipient_id::text,';') 
FROM messages m 
INNER JOIN messages_recipients r 
ON r.message_id = m.id 
INNER JOIN (SELECT distinct message_id from messages_recipients 
      WHERE recipient_id = 10) u 
ON u.message_id = r.message_id 
GROUP BY r.message_id,subject 
+0

Это не работает: http://sqlfiddle.com/#!15/63c2a/2 – Makla

+0

Мой плохо - вступил в неправильном колонке! Устранили это ... – mlinth

Смежные вопросы