2014-10-08 3 views
0

Ok, я застрял с дизайном стола, который я не могу изменить сейчас и мне нужно на основе имени пользователя, чтобы получить все его друзья из friends_relationship столаSQL получить друзей из друзей таблицы по имени пользователя

То, что я Сейчас:

select distinct(username) from members m 
inner join members_friends f on f.id_memb_friend1 = m.id 
where (f.id_memb_friend1 = 173 or f.id_memb_friend2 = 173) 

таблица членов имеет столбцы: идентификатор, имя пользователя member_friends таблица имеет столбцы, идентификатор, id_memb_friend1, id_memb_friend2

запрос я отправил будет возвращать также имя пользователя члена с идентификатором 173, который является владельцем и его никья меня например Splendid. Я хочу достичь всех друзей вместе с именем пользователя, основанным на имени пользователя, которое я предоставляю (Splendid = id 173).

Update:

Я хочу для того чтобы достигнуть этого:

ввода: имя пользователя = Splendid Действие: получить имена пользователей прекрасных друзей (вместе с их идентификаторами) Выход:

members.id = 5 имя пользователя = John

members.id = 15 имя пользователя = Lara

members.id = 66 имени пользователя = Alex

и так далее ...

+0

Ваши вопросы немного сбивает с толку. Можете ли вы опубликовать, какой образец будет выглядеть, и какую таблицу должен получить каждый столбец? – JLampon

+0

Я предоставил результат ... спасибо за ваш ввод – Splendid

ответ

0

(Обновлено для размещения нового требование выраженно в комментариях.) (Обновлено для размещения нового требования, выраженное в обновленном вопросе .)

Ваш вопрос (был) несовместим с тем, хотите ли вы искать на основе имени пользователя или идентификатора пользователя. Хотя в вашем запросе используется идентификатор, я использую имя пользователя для уточненного требования. Я также предполагаю, что вы хотите друзей 'usernames (only). Кроме того, из вашего первоначального запроса видно, что вы хотите посмотреть на отношения в обоих направлениях (совпадение на friend1, отображение всех friend2 и AND на friend2, отображение всех friend1).

Вот один из способов сделать все, что:

select mm.id, mm.username 
    from members mm 
    inner join member_friends f on f.id_memb_friend1 = mm.id 
    inner join members m on m.id = f.id_memb_friend2 
    where m.username = 'Splendid' 
union distinct 
select mm.id, mm.username 
    from members mm 
    inner join member_friends f on f.id_memb_friend2 = mm.id 
    inner join members m on m.id = f.id_memb_friend1 
    where m.username = 'Splendid' 
+0

Спасибо, это работает, но мне нужно искать на основе имени пользователя. – Splendid

+0

Хорошо, тогда вам нужно присоединиться к таблице участников во второй раз. Ответ обновлен. –

+0

Обновлено, чтобы также предоставить идентификатор друга, как описано в обновленном вопросе. –

0

ВЫБОР КОРПУСА f.id_memb_friend1 КОГДА '173' THEN ELSE f.id_memb_friend2 f.id_memb_friend1 END AS MemberID, м. username ОТ members_friends е внутреннее соединение членов м на f.id_memb_friend1 = m.id ИЛИ f.id_memb_friend2 = m.id где (f.id_memb_friend1 = 173 или f.id_memb_friend2 = 173)

Смежные вопросы