Задать вопрос
@Programmir

Как вывести общих друзей?

Есть таблица users с полями id, name, surname
Есть таблица friends с полями id, user_id, friend_id
Например, если пользователь с id=7 добавит в друзья пользователя с id = 25, то в таблицу friends добавятся две записи
id | user_id | friend_id
1 | 7 | 25
2 | 25 | 7
Вот такие таблицы. Как вывести общих друзей у пользователя?
  • Вопрос задан
  • 264 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
$your_friends = [12, 333, 7654, 987, 3456, 962, 150]; // твои друзья
$friends_your_friend = [1444, 973, 54, 987, 3456, 92, 4900]; // чужие друзья
$mutual_friends = array_intersect($your_friends, $friends_your_friend);  // [ 987, 3456]

$sql = 'select * from `friends` where id_user in('.implode(',',$mutual_friends).')';


3869107.jpg
Ответ написан
rpsv
@rpsv
делай либо хорошо, либо никак
1 вариант:
SELECT f1.friend_id
FROM friends AS f1
INNER JOIN friends AS f2 ON f1.friend_id = f2.friend_id
WHERE f1.user_id = 7 AND f2.user_id = 25


2 вариант:
SELECT friend_id
FROM friends
WHERE user_id IN (7, 25)
GROUP BY friend_id
HAVING count(friend_id) = 2
Ответ написан
Комментировать
pro100ShCoder
@pro100ShCoder
программист
SELECT DISTINCT friend_id  
FROM friends 
WHERE 
user_id IN (7,25) 
AND friend_id NOT IN (7,25) // исключаем из общего списка друзей этих юзеров

Предложенный вариант не подойдет - другая логика. Из предложенных здесь решений я бы использовал второй вариант у Илья
Ответ написан
andre-92
@andre-92
PHP / yii2
select users.* 
from (select friend_id from friends where user_id = 7) as t1 
join (select friend_id from friends where user_id = 25) as t2 on t1.friend_id = t2.friend_id
join users on users.id = t1.friend_id
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы