"люди, которых вы можете знать" SQL запрос - PullRequest
4 голосов
/ 10 ноября 2010

Я работаю над функцией "люди, которых вы знаете". У меня есть две таблицы:

ПОЛЬЗОВАТЕЛИ
ID
электронная почта
Имя
и т.д.

1009 * приятельств * user_id
friend_id

Для каждой дружбы я делаю две записи. Скажем, пользователи 7 и 9 становятся друзьями ... Я бы сделал запись, где user_id = 7, friend_id = 9, и другую, где user_id = 9, friend_id = 7 в таблице дружбы.

Как бы я сделал SQL-запрос, который предлагает людей, которых я, вероятно, знаю, основываясь на друзьях моих друзей? Я также хочу, чтобы это было заказано на основе самых общих друзей.

Ответы [ 4 ]

7 голосов
/ 10 ноября 2010
select u.id, u.email, u.name, u.etc
-- Get all my friends
from Friendships as f1
-- Get their friends
inner join Friendships as f2
    on f1.friend_id = f2.user_id
-- Get their friends User information
inner join Users as u
    on f2.friend_id = u.id
where f1.user_id = @userId

Было бы с чего бы я начал.

0 голосов
/ 17 декабря 2016

Вы можете использовать запрос ниже:

Запрос :

Select * from [USERS] U where id not in 
((select F.friend_id as id from [FRIENDSHIPS] f where f.user_id='" + Session["UserId"] + "' and f.Status=1)
union (select F.user_id as id from [FRIENDSHIPS] f where f.friend_id='" + Session["UserId"] + "' and f.Status=1)
union (select F.friend_id as id from [FRIENDSHIPS] f where f.user_id='" + Session["UserId"] + "' and f.Status=0)
union (select F.friend_id as id from [FRIENDSHIPS] f where f.user_id='" + Session["UserId"] + "' and f.Status=2))
and U.id !='" + Session["UserId"] + "'

ПРИМЕЧАНИЕ. Статус может быть " 1 ", " 0"," 2"в качестве параметров по умолчанию.Их значение таково:

1 : подтверждено 0 : еще не подтверждено 2 : отклонено

Я написал запросКод выше с учетом этих параметров.Ваш тоже может быть таким.

Успокойся!

0 голосов
/ 10 ноября 2010
select * from 
(select distinct friendsOfFriends.friends_id, count(1) as mutualfriends
  from FRIENDSHIPS friendsOfFriends
 inner join FRIENDSHIPS friends ON friends.friend_id = friendsOfFriends.user_id
  where friends.user_id = @myuserid
  group by friendsOfFriends.friends_id) t
order by mutualfriends desc
0 голосов
/ 10 ноября 2010
Select friend_id from friendships where user_id IN (select friendid from freindships where userid = <userid>)

Учитывая, что пользователи 7 и 9 являются друзьями. Для пользователя 7 этот запрос даст вам список друзей пользователя 9.

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