这是我的表的结构:
第一个表“用户”:
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 = ?");
但是我需要得到特定用户的所有朋友
答案 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