我有两张 table :
用户:
id | user | fname | sname | photo
1 | Igor | Igor | Souza | profile.jpg
2 | John | John | Jhow | pic.png
3 | Lucas| Lucas | Coll | photo.jpg
friend :
id | friend1 | friend2 | status
1 | 1 | 3 | 2
2 | 1 | 2 | 2
3 | 3 | 2 | 2
在好友表中,status = 2
表示他们是好友,friend1
是发送好友请求的用户。
为了选择登录用户的 friend ,我这样做了($userID
对应于访问的用户 ID 个人资料页面):
SELECT u.user, u.fname, u.sname, u.photo
FROM friends f
INNER JOIN users u
ON (u.id = f.friend1 AND f.friend1 <> '$userID') OR (u.id = f.friend1 AND f.friend2 <> '$userID')
WHERE (f.friend1 = '$userID' OR f.friend2 = '$userID') AND f.status = 2
我想计算登录用户 ($userIDLog
) 和访问个人资料页面的用户 ($userID
) 之间的共同好友。但我不知道如何做到这一点,在 LEFT JOIN
的子查询中使用 count
吗?如果是的话,子查询怎么做?观察:我也需要用户信息(用户)
最佳答案
首先假设$userId = 1并且$userIDLog = 2,现在我们可以找到登录用户的好友。
SELECT friend2 as f FROM friends where friend1 = 1
UNION SELECT friend1 as f FROM friends WHERE friend2 =1
类似地,其他用户的好友也由
给出SELECT friend2 as f FROM friends where friend1 = 2
UNION SELECT friend1 as f FROM friends where friend2 =2
现在,如果您在 f 上加入他们,您就会得到答案。
SELECT COUNT(*) FROM
(SELECT friend2 as f FROM friends where friend1 = 1
UNION SELECT friend1 as f FROM friends WHERE friend2 =1) AS a
INNER JOIN
(SELECT friend2 as f FROM friends where friend1 = 2
UNION SELECT friend1 as f FROM friends where friend2 =2 ) AS b
ON a.f = b.f
他们唯一的共同好友是 3,并且此查询的答案数 = 1。
关于mysql - 获取 LEFT JOIN 中共同好友的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36973543/