Получить тех, кто не соответствует - PullRequest
0 голосов
/ 11 ноября 2018

Есть два пользователя

Пользователь 1 profile_id

3734387944

затем User 2 Profile_id

1421536173

есть таблица друзей со структурой

from_profile_id
to_profile_id
request
blocked_by

а это данные и структура пользователей

var_id  profile_id  fullname             firstname   lastname
180     3734387944  John Louis Domincel  John Louis  Domincel  
181     1421536173  James Domincel       James       Domincel  

а это данные и структура друзей

from_profile_id  to_profile_id  request  blocked_by
3734387944       1421536173     3        3734387944

а это данные и структура поста

id   profile_id   text 
1    3734387944   POST OF USER 1
2    1421536173   POST OF USER 2

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

SELECT * FROM post ORDER BY var_id DESC

Но я хочу отфильтровать это: Пользователь 1 заблокировал пользователя 2, поэтому оба они не могут получать каждое сообщение пользователя, та же функция. Если не друзья, но если они друзья, данные будут отображаться у каждого пользователя.

Request Legend
1 = Friend Request
2 = Friends
3 = Blocked

Я пробовал этот другой запрос: но пользователь 1 может видеть сообщения пользователя 2, а пользователь 2 не может видеть сообщение пользователя 1, только если он заблокирован. я бы хотел измените его и сделайте так, чтобы они оба не могли видеть сообщения каждого пользователя, если он заблокирован, а не друзья

SELECT u.*,f.*
FROM post AS u
LEFT JOIN friends AS f
ON f.blocked_by = u.profile_id AND
f.blocked_by <> "3734387944" AND
(
f.to_profile_id = "3734387944" OR
f.from_profile_id = "3734387944"
) AND
f.request = 3
WHERE f.from_profile_id IS NULL

Вот DB-FIDDLE LINK

1 Ответ

0 голосов
/ 11 ноября 2018

Как упомянуто в комментарии, используйте подвыбор оператора CASE для получения правильного идентификатора пользователя, остальное - просто обычный выбор.

...
WHERE u.profile_id IN (
  SELECT CASE WHEN blocked_by = ? THEN from_profile_id ELSE to_profile_id END AS friend_id 
  FROM friends
  WHERE (from_profile_id = ? OR to_profile_id = ?) AND request = 1
)
...

https://www.db -fiddle.com / ж / 9K3wy4tqRKVGgvvyxvkgMS / 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...