我正在开发一个朋友请求系统,目前只停留在一个点上。我有两个表,即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 *
FROM requests x
JOIN member y
ON x.user_id = y.`member_id` OR x.friend_id = y.`member_id`
WHERE x.status = '1' AND y.member_id = '$member_id'
它通过在两个表上使用内部联接来工作,获取与user_id或member_id匹配的所有行,然后将列表限制在$ member_id中。
虽然您的问题中没有包含任何其他代码,但我怀疑您使用PHP和mysqli来运行此查询。我建议使用准备好的查询而不是简单的变量替换,这样就可以避免SQL注入。
答案 1 :(得分:-1)
SELECT name from member where user_id IN (select friend_id from request where user_id='$member_id' AND status=1);
希望这会有效!