如何在MySQL中搜索不是当前用户的朋友的成员?

时间:2014-11-02 01:21:11

标签: mysql

我有一个成员表和一个成员请求表。在请求表中是作者ID和收件人ID以及状态的列。如果当前用户的行具有其ID作为作者ID而另一个成员作为收件人ID(反之亦然)且状态为1,则该用户是该成员的朋友。我想设置一个搜索系统,可以用来查找用户不是他们输入的名字的朋友。下面的查询用于查找用户的当前朋友。他们输入的名称。如何搜索用户不是朋友的成员?

SELECT 
  r.author_id, m.member_id, m.display_name
FROM member_requests AS r
LEFT JOIN members AS m ON m.member_id = r.author_id
WHERE r.recipient_id = 1 
  AND r.status = 1 
  AND m.display_name LIKE "John%"
UNION SELECT 
  r.recipient_id, m.member_id, m.display_name
FROM member_requests AS r
LEFT JOIN members AS m ON m.member_id = r.recipient_id
WHERE r.author_id = 1 
  AND r.status = 1
  AND m.display_name LIKE "John%"

http://sqlfiddle.com/#!2/eb0d4d/3

1 个答案:

答案 0 :(得分:0)

这个比你想象的容易得多。根据上一个问题的答案,如果您有一个朋友的成员列表,您可以在成员表中搜索不在该列表中的ID。

试试这个:

SELECT member_id
FROM members
WHERE member_id NOT IN(
  SELECT recipient_id AS friends
  FROM member_requests 
  WHERE author_id = 1 AND status = 1 
  UNION
  SELECT author_id AS friends
  FROM member_requests
  WHERE recipient_id = 1 AND status = 1)
AND member_id != 1;

SQL Fiddle