显示当前好友

时间:2018-04-15 12:51:12

标签: php mysql sql

我正在开发一个朋友请求系统,目前只停留在一个点上。我有两个表,即memberrequestsrequests表存储了两个用户的user_idfriend_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如何。任何人都可以指出我在这里做错了吗?

2 个答案:

答案 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);

希望这会有效!