2014-11-02 108 views
0

我有兩個表:members和member_requests。當成員向好友請求發送另一個成員時,會將一行插入到member_requests表中。如果收件人接受請求,則狀態更新爲1.如果某人拒絕該請求,該請求將被刪除。我已經嘗試了許多不同的查詢來爲特定用戶生成一個朋友列表,但沒有一個似乎能正常工作。請求的author_id必須是當前成員的id,或者接收者id必須是當前成員的id。有人可以提供一個查詢,可以做到這一點?如何根據好友請求的狀態使用MySQL獲取好友列表?

http://sqlfiddle.com/#!2/021d7/13

    SELECT 
         r.request_id, r.author_id, r.recipient_id, r.status, 
         m.member_id, m.display_name 
        FROM member_requests AS r 
        LEFT JOIN members AS m ON (r.author_id = m.member_id OR r.recipient_id = m.member_id) 
        WHERE r.status = 1 
        ORDER BY m.display_name 
+0

你嘗試過使用'NOT IN'條件嗎?類似於'SELECT * FROM成員朋友的朋友WHERE friend_id NOT IN(SELECT成員的直接朋友)'? – 2014-11-02 00:37:48

+0

如果您在編輯之前看到我的文章,請再閱讀一次。我意識到,我所擁有的查詢實際上並不是朋友,而是所有成員。 – ShoeLace1291 2014-11-02 00:43:54

+0

所以,如果我理解正確(在您編輯之後) - 您想獲得某個成員的所有當前朋友的列表?那是 - 包含「我」(作爲作者或作爲友誼的接受者)並且具有「1」狀態的所有請求的列表? – 2014-11-02 00:48:41

回答

1

這聽起來不太壞。你可以做的是獲得用戶發送請求並被接受的所有時間的列表,以及用戶收到請求並被接受的所有時間的列表,並將這兩個結果聯合在一起。

試試這個:

(SELECT recipient_id 
FROM member_requests 
WHERE author_id = 1 AND status = 1) 
UNION 
(SELECT author_id 
FROM member_requests 
WHERE recipient_id = 1 AND status = 1); 

這是你的SQL Fiddle回來。

+0

謝謝!我將發佈另一個關於通過不是現有會員的朋友的成員進行搜索的問題......如果您想要一些快速回復......大聲笑。 – ShoeLace1291 2014-11-02 01:16:45