2016-04-16 7 views
2

Как получить список друзей из таблицы друзей с отсчетами друзей моих друзей (граф не из моих друзей)Как я могу получить список друзей из таблицы друзей с отсчетами друзей моих друзей

Друзей стола» tbl_users_friends

поле 1: идентификатор поле 2: user_id поле 3: friend_user_id

и мне нужно из положить как:

а имеет следующие friedns:

х (10) у (2) г (0)

Выше список моих друзей и в скобках содержит подсчитывать своих друзей.

Благодаря

+0

Возможно ли, что пользователь А имеет друг B, но B не имеет друга A? Другими словами: возможно ли, что мой друг не имеет друзей (даже не я)? –

+1

@PaulSpiegel 'z (0)' в вопросе говорит, что это возможно, я думаю, – splash58

+0

@ splash58 вы правы, я думаю :-) –

ответ

1
select user_id, count(*) cnt 
    from Friends 
    where user_id in 
     (select friend_user_id 
     from Friends 
     where user_id = user_id_of_A) 
    group by user_id 
+0

Спасибо за ваш ответ, но извините, это не работая в ожидании –

+1

, возможно, вы поставили какие-либо данные теста на sqlfidllle - http://sqlfiddle.com/ – splash58

1

Попробуйте что-то вроде этого:

select u.user_id, u.name, count(uf1.id) as num_friends 
from tbl_users_friends uf 
inner join tbl_users u   on u.user_id = uf.friend_user_id 
left join tbl_users_friends uf1 on uf1.user_id = uf.friend_user_id 
where uf.user_id = 1 
group by u.user_id, u.name 

http://sqlfiddle.com/#!9/10033/1

Вы должны изправлены пользователей имен таблиц и столбцов.

Другим решения с подвыборкой, но без группы по:

select u.user_id, u.name, (
     select count(*) 
     from tbl_users_friends uf1 
     where uf1.user_id = uf.friend_user_id 
    ) as num_friends 
from tbl_users_friends uf 
inner join tbl_users u on u.user_id = uf.friend_user_id 
where uf.user_id = 1 
Смежные вопросы