我有一个成员表和一个成员请求表。在请求表中是作者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%"
答案 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;