我正在开发一个朋友请求系统,目前只停留在一个点上。我有两个表,即member
和requests
。 requests
表存储了两个用户的user_id
和friend_id
,我想显示要从member
表中获取的当前朋友的名称。例如,request
表:
request_id | user_id(to) | friend_id(from) | status
2 | 2 | 3 | 1
3 | 3 | 1 | 1
6 | 4 | 2 | 1
7 | 2 | 1 | 1
我通过以下查询获得了当前的合作伙伴;
SELECT * FROM requests WHERE user_id='2' OR x.friend_id='2' AND x.status='1'
但我现在可以展示的只是id。我想要实现的是根据存储在member
表中的id来获取正确的名称。存储在member
表中的数据是;
member_id | name
1 | John
2 | Steve
3 | Sarah
4 | Stuart
所以,如果 id 没有。 2& 3是朋友,添加朋友的名称应显示在接受请求的用户个人资料中。
我想做什么:
SELECT
x.*,
y.*
FROM
requests x,
member y
WHERE
x.user_id='$member_id' OR
x.friend_id='$member_id' AND
y.member_id = '$member_id' AND
x.status='1'
此查询的结果也会获得其他成员的列表,无论我指定的member_id
如何。任何人都可以指出我在这里做错了吗?
答案 0 :(得分:0)
SELECT
x.*,
y.*
FROM
requests x
INNER JOIN
member y ON y.member_id = x.user_id OR y.member_id = x.friend_id
WHERE
x.user_id='$member_id' OR
x.friend_id='$member_id' AND
x.status='1'
INNER JOIN将使它成为您的查询将只返回请求和成员表中存在的行。
由于您的WHERE子句,这仅限于您传入的$ member_id的请求。