У меня есть следующая схема базы данных Mysql:
User(Id, FirstName, LastName, NickName, Etc.)
Request(SenderId, ReceiverId)
Friendship(Id1, Id2)
Я считаю дружбу неориентированным отношением, что означает, что для каждой дружбы я вставляю ее дважды вСтол дружбы.(Дайте мне знать, если это не очень хорошая идея, пожалуйста.)
Я пытаюсь получить список пользователей, которые не являются друзьями определенного пользователя (позвольте мне назвать его UserX), нитекущий запрос к нему / от него.
Мои первоначальные испытания привели меня к следующему:
SELECT User.Id, User.NickName, User.Picture FROM User
LEFT JOIN Friendship A ON User.Id = A.Id1
LEFT JOIN Friendship B ON User.Id = B.Id2
LEFT JOIN Request C ON User.Id = C.Sender
LEFT JOIN Request D ON User.Id = D.Reciever
WHERE User.Id <> ?
И, конечно же, заполнитель - идентификатор UserX.
Thisне работает, потому что, хотя кортежи, у которых есть дружеские отношения или запросы с UserX, удаляются, друзья все равно появляются, потому что они дружат с другими пользователями!
Заранее спасибо.