2015-02-23 37 views
0

有兩個表共同的朋友指示燈

  • 1 :) USER - 包含用戶信息{ID,姓名,ADRESS ....等}
  • 2 :)關係 - 包括我的用戶 之間的關係{發件人,受體,作用}

現在,當用戶「XYZ」訪問用戶「ABC」 ABC的朋友列表應該有共同的朋友,只有朋友分類與ABC ..

「使用者」

表結構:
柱(ID,用戶)的值(1,XYZ)(2,ABC),(3,LMN),(4,KMP)

表結構(1,2,1),(1,3,1)(2,3,1)(2,4,1)

值((發送者,接受者,動作) 1,2,1)的關係是指用戶1和2是朋友嗎? 行動1表示有朋友

我想,有「所有共同的朋友」和「不屬於共同的朋友ABC的所有朋友」

我希望我做了我點的任何一個視圖幫助表示讚賞用戶XYZ的

+3

我們需要更多關於表結構的信息和關係嗎?或者你可以添加樣本數據和預期的輸出? – 2015-02-23 07:31:07

+0

EXISTS,加入組等,可能有幾種解決方案。 – jarlh 2015-02-23 07:48:25

+0

@jarlh:你可以寫一個示例查詢或分享一些鏈接,這可能會幫助我厭倦一切 – alanabraham 2015-02-23 07:53:56

回答

0

友:

select sender from relation where acceptor = (select id from user where user = 'xyz') 
union 
select acceptor from relation where sender = (select id from user where user = 'xyz'); 

您可以通過查詢表只有一次讓他們也:

select distinct case when r.sender = u.id then r.acceptor else r.sender end 
from user u 
join relation r on u.id in (r.sender, r.acceptor) 
where u.user = 'xyz'; 

現在使用上述查詢之一,我們可以得到abc的朋友以及xyz的朋友。通過將xyz的朋友外聯到abc的朋友,我們可以確定abc的朋友是否是共同的朋友。

select 
    friends_of_abc.friend, 
    friends_of_xyz.friend is not null as is_a_mutual_friend 
from 
(
    select distinct case when r.sender = u.id then r.acceptor else r.sender end as friend 
    from user u 
    join relation r on u.id in (r.sender, r.acceptor) 
    where u.user = 'abc' 
) friends_of_abc 
left join 
(
    select distinct case when r.sender = u.id then r.acceptor else r.sender end as friend 
    from user u 
    join relation r on u.id in (r.sender, r.acceptor) 
    where u.user = 'xyz' 
) friends_of_xyz on friends_of_xyz.friend = friends_of_abc.friend; 
+0

謝謝youuuu ..你救了我的生命.. :) – alanabraham 2015-02-23 09:59:54

+0

如何從用戶表中獲取其他數據,如用戶地址在這個相同的視圖 – alanabraham 2015-02-23 10:28:12

+0

擴展你的friends_of_abc查詢:'...作爲朋友,地址從用戶u ...'然後使用你的select子句中的列:'select friends_of_abc.friend,friends_of_abc.address,...'。 – 2015-02-23 10:57:19