选择当前用户的朋友的所有ID?

时间:2019-01-15 17:00:25

标签: php android mysql

这是我的表的结构:

第一个表“用户”:

id  --  email  --    name  
1  --   example  --  John  
2  --   example2 --  Paul
3  --   example3 --  Sara

users表存储所有用户及其电子邮件

第二个表的“朋友”:

id --   id_from --  id_to  
1  --     1    --     2  
2  --     1    --     3  
3  --     2    --     3  

friends表存储用户之间的友谊,例如John(id:1)是Paul(id:2)和Sara(id:3)的朋友

我的问题是,我该如何结识约翰的所有朋友。我可以通过此行代码找到一个朋友:

$stmt = $this->prepare("SELECT * FROM friends WHERE id_from = ? OR id_to = ?");

但是我需要得到特定用户的所有朋友

2 个答案:

答案 0 :(得分:2)

尝试这样的事情:

$stmt = $this->prepare("
    SELECT u.*
    FROM users u
    JOIN friends f ON u.id = f.id_to
    WHERE f.id_from = ?
    UNION
    SELECT u.*
    FROM users u
    JOIN friends f ON u.id = f.id_from
    WHERE f.id_to = ?
");

答案 1 :(得分:1)

您可以使用exists使用id = 1来检查用户的朋友:

select * from users u
where exists (
  select 1 from friends f
  where 
  (f.id_from = 1 and f.id_to = u.id) 
  or
  (f.id_to = 1 and f.id_from = u.id)
)

或者如果您只需要朋友的ID:

select id_to friendid from friends where id_from = 1 and id_to is not null
union
select id_from friendid from friends where id_to = 1 and id_from is not null