Фильтрация сложных запросов MySQL из третьей таблицы - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть три таблицы.

users, friends and communityusers таблицы.

Я пытаюсь создать систему групп, подобную Facebook.Пользователь попытается найти своих друзей в списках друзей, чтобы добавить их в группу.

Итак, здесь я пытаюсь удалить тех друзей, которые уже добавлены в группу.Здесь таблица групп пользователей: communityusers ..

Это структура моей таблицы communityusers.

id | community_id | user_id 

Я не могу использовать эту таблицу с моим текущим запросом.

SELECT f.id, u.id as user_id, u.userName, u.firstName, u.lastName, u.profilePic from friends f, users u

WHERE CASE 
WHEN f.following_id=1
THEN f.follower_id = u.id 
WHEN f.follower_id=1
THEN f.following_id = u.id
END 
AND
f.status= 2
AND 
  (
     u.firstName LIKE 's%' OR u.lastName LIKE 's%'
  )

Этот запрос возвращает списки друзей с идентификатором пользователя 1, теперь я хочу исключить фильтрацию пользователей из таблицы communityusers.user_id из этого запроса не должно присутствовать в таблице communityusers.Как я могу отфильтровать это из communityusers или из третьей таблицы?

Пожалуйста, дайте мне знать, если вопрос не ясен.

Любые предложения, идеи и помощь будут высоко оценены.Большое вам спасибо.

Редактировать

После выполнения запроса я получаю enter image description here

Моя communityusers таблица

enter image description here

См. user_id = 2 также выбран из вышеприведенного запроса.Я хочу удалить user_id = 2 из результата, поскольку он существует в таблице communityusers.

Я пытаюсь создать скрипку, но по какой-то причине он не работает для меня.

Еще раз спасибо.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

@ sadek Просто используйте не в, где условие

SELECT f.id, u.id as user_id, u.userName, u.firstName, u.lastName, u.profilePic
from friends f inner join users u on
CASE WHEN f.following_id=1 THEN f.follower_id = u.id WHEN f.follower_id=1 THEN f.following_id = u.id
END AND f.status= 2
where u.id not in (select distinct user_id from communityusers) and (u.firstName LIKE 's%' OR u.lastName LIKE 's%')
0 голосов
/ 25 сентября 2018

Попробуйте использовать левое соединение с таблицей communityuser, если задано условие cu.user_id: null - это даст вам тех пользователей, которых нет в таблице communituuser

select a.* from 
(SELECT f.id, u.id as user_id, u.userName, u.firstName, u.lastName, u.profilePic from friends f inner join users u
on CASE WHEN f.following_id=1 THEN f.follower_id = u.id WHEN f.follower_id=1 THEN f.following_id = u.id
END AND f.status= 2 where u.firstName LIKE 's%' OR u.lastName LIKE 's%')a
left join (select * from communityuser where community_id<>4) cu on a.user_id=cu.user_id
where cu.user_id is null
...