如何从Database mysql中选择待处理的好友请求

时间:2013-11-04 19:40:02

标签: php mysql sql

SQL:http://www.sqlfiddle.com/#!2/0f7a0d5/4

表包含以下行:

INSERT INTO `friends` (`asker_user_id`, `asked_user_id`, `status`) VALUES (1,2,1);
INSERT INTO `friends` (`asker_user_id`, `asked_user_id`, `status`) VALUES (2,1,1);
INSERT INTO `friends` (`asker_user_id`, `asked_user_id`, `status`) VALUES (3,2,1);

此查询选择当前用户的双向朋友:

    SELECT f1.asked_user_id AS friend_id
        FROM friends AS f1 JOIN friends AS f2
        ON f1.asked_user_id = f2.asker_user_id
        AND f1.asker_user_id = f2.asked_user_id
    WHERE f1.status = 1 AND f2.status = 1
    AND f1.asker_user_id = 2

因此它导致1.因为用户2只有用户1作为双向朋友。

如何显示用户2的待处理请求?用户2是ask_user_id?

这是(3,2,1)是用户2的待处理请求。其中3要求2成为朋友。而对于他们成为双向的朋友,将创建新的入口(2,3,1)。

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式获得peding请求:

SELECT f1.asker_user_id AS friend_id
FROM friends AS f1 
LEFT JOIN friends AS f2
    ON f1.asked_user_id = f2.asker_user_id
    AND f1.asker_user_id = f2.asked_user_id   
WHERE f1.status = 1 AND f2.status IS NULL
AND f1.asked_user_id = 2

sqlfiddle demo

答案 1 :(得分:0)

这是你要找的吗?

这将显示想要成为用户2的朋友的用户,因此用户2有2个未决请求

 SELECT f1.asker_user_id AS friend_id
 FROM friends AS f1 
 WHERE f1.status = 1 
 AND f1.asked_user_id = 2

demo