2013-05-04 102 views
0

林建設一個平臺,在這裏用戶可以與其他用戶聯繫(社會平臺)朋友好友最近添加

我有一個表所謂的朋友,我很節省這樣

user_id | friend_id | request | add_date 

現在聯繫我需要編寫一個sql查詢來獲取最近的朋友,特定用戶的朋友添加了他們是否已經是用戶的朋友。用戶也必須被接受。

把它當做一個新聞提要,我是看到誰最近加入我的朋友(新最近添加的人可以成爲我的朋友或沒有)

到目前爲止,我有這個,但是當我的朋友加入只能我已經有的人。

SELECT user_main_id AS frmname, friend_id AS type_id, add_date AS date 
FROM friends 
WHERE friend_id 
IN 
(SELECT friend_id 
FROM friends WHERE (friend_id='$user_id' OR user_main_id='$user_id') 
AND request=1 AND friend_id!=$user_id) 
AND request=1 AND friend_id!=$user_id AND user_main_id!=$user_id 
ORDER BY date DESC 

也許有更好的爲什麼要這樣做。

對此提出建議?非常感謝謝謝。連接是雙邊的,user_id和friend_id沒有區別。是用這些名字設計的,必須繼續下去。

取樣記錄

96618 50683 1 2013-05-08 13:44:31 
96618 1230 1 2013-04-03 18:28:51 
11671 96618 1 2013-04-03 13:26:51 
11671 1230 1 2013-03-23 18:26:08 

一旦96618連接着50683發生。用戶11671例如將獲得味精說你的朋友,96618現在有50683

+0

你能給樣品記錄嗎? – 2013-05-04 16:13:47

+0

你可以做一個加入,比子選擇更好... – 2013-05-04 16:30:02

回答

0

的朋友試試這個:

SELECT f2.friend_id 
FROM friends f1       # Friends of target user 
    INNER JOIN friends f2 
     ON f1.friend_id = f2.user_id  # Friends of their friends 
     AND f2.request = 1 
     AND f2.friend_id != f1.user_id 
    INNER JOIN friends f3    # Limiting it to mutual friends 
    ON f2.friend_id = f3.user_id AND f3.friend_id = f1.user_id 
WHERE f1.user_id = 11671 AND f1.request = 1 
ORDER BY f2.add_date DESC 

請注意,您當前的表結構,你將需要爲每個友誼兩行,每個方向一個。要做到只有一行,你可能想把它分成兩個表 - 友誼和friendship_members。

+0

謝謝。我會研究這個 – Mortage 2013-05-04 19:04:21