2014-01-14 2 views
0

Я хочу получить все сообщения от друзей пользователя, но только те, которые у него есть разрешение на просмотр. У меня есть следующие таблицы в моей базе данных (только соответствующие атрибуты включены):Получить сообщения от друзей (у вас есть разрешение на просмотр)

Пользователь:

userid 

Сообщение

postid authorid 

Дружба

friendshipid userid friendid 

Разрешение

postid userid 

Каждая дружба имеет 2 записей в таблице Дружба (если пользователи 1 и 2 являются друзьями, будет 1 2 и 2 1 добавляется в таблицу). Каждое сообщение имеет несколько записей в таблице Permission, идентификатор пользователя в этих таблицах означает пользователя, у которого есть разрешение на просмотр сообщения (это не означает, что этот пользователь является автором сообщения). Этот пользователь должен быть знакомым с автором сообщения.

Какой был бы лучший запрос для получения моих результатов с хорошей производительностью? Также я мог бы достичь более высокой производительности, если добавлю автора в таблицу Разрешение?

ответ

1

Получить все сообщения, где @UserId «ы друзья авторов и где @UserId имеет разрешение увидеть сообщение:

SELECT postid 
FROM Post 
INNER JOIN Friendship ON Friendship.userid = @UserId AND Post.authorid = Friendship.friendid 
INNER JOIN Permission ON Post.postid = Permission.postid AND Permission.userid = @UserId 

Обратите внимание, что производительность является зависеть от вещей вне запроса, таких как индексы, но это должно быть эффективный запрос.

+0

Работает как очарование. Большое спасибо. – neits

+0

есть проблема в вашем запросе, что, если есть только одна запись людей, которые могут быть друзьями, скажем, 1 или 2 или 2 и 1, что вы будете делать тогда? вы можете помочь ?? –

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