mysql - 获取 LEFT JOIN 中共同好友的数量

标签 mysql join subquery left-join inner-join

我有两张 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/

相关文章:

sql - Oracle SQL 相关更新

android - 将android应用程序连接到MYSQL数据库

PHP MYSQL 事件监听器

mysql - 连接复合键

sql - 根据另一个表的计数创建包含多个行实例的表

r - data.table 更新对非等价自联接的奇怪行为

具有多个子选择的 MySQL SQL 选择查询

mysql - 如何使用 PhpMyAdmin 和 Github

mysql按日期范围显示行和组中的每种类型

MySQL子查询或连接不同数据库,其中数据库名称在主查询的结果集中