【问题标题】:mysql can't pass column from query to nested subquerymysql无法将列从查询传递到嵌套子查询
【发布时间】:2018-10-22 15:12:32
【问题描述】:

我想要的是找到与 user2 (id = 2) 关联的每个朋友,然后找到每个 user2 朋友和 user1 之间的共同朋友的数量。

mysql to find user2 Friends and get mutual_count of Friends with user1 ( with every user2 friend)

表用户

user_id |   username
------------------
1       |   user1
2       |   user2
3       |   user3
4       |   user4
5       |   user5
6       |   user6
7       |   user7

表友

user_one_id |   user_two_id
------------------------
1           |   4
1           |   5
1           |   6
2           |   3
2           |   4
3           |   1
3           |   4
5           |   2
5           |   3
5           |   4
6           |   2
6           |   3
7           |   2

预期输出:user2的朋友//(朋友姓名,朋友id,当前朋友id和user1之间的朋友的相互计数(id = 1))

username | user_id  | mutual_count
------------------------
user3   |  3        | 3     // user3 and user1 mutual ->  (user4,user5,user6)
user4   |  4        | 2     // user4 and user1 mutual ->  (user3 ,user5)
user5   |  5        | 2     // user5 and user1 mutual ->  (user3 ,user4)
user6   |  6        | 1     // user6 and user1 mutual ->  ( user3)
user7   |  7        | 0    // user7 and user1 mutual ->   (0)

mysql语句

SELECT  users.username,users.user_id,

    (SELECT count(a.friendID) FROM
        (   SELECT user_two_id friendID FROM friends  WHERE user_one_id =users.user_id
            UNION 
            SELECT user_one_id friendID FROM friends WHERE user_two_id = users.user_id
        ) AS a 
        JOIN  
        (   SELECT user_two_id friendID FROM friends WHERE user_one_id = 1
            UNION 
            SELECT user_one_id friendID FROM friends WHERE user_two_id = 1
        ) AS b 
        ON  a.friendID = b.friendID
    ) as mutual_count

FROM friends LEFT JOIN  users    
ON friends.user_one_id = users.user_id or  friends.user_two_id = users.user_id  
WHERE (friends.user_one_id = 2 OR friends.user_two_id = 2)   AND users.user_id !=2
order by user_id

我得到的错误 'where 子句'中的未知列'users.user_id' 获取mutual_count 的问题子查询无法知道users.user_id

任何帮助表示赞赏

【问题讨论】:

  • 您的问题不清楚且令人困惑。您想要user1 和所有其他用户之间的共同好友数量吗?
  • 我想要 user1 和 user2 朋友之间的相互数量
  • 是的,问题似乎出在子查询中的users.user_id ..
  • as facebook 如果您以 user1 身份登录并转到 user2 朋友,您将显示 user1 和 user2 朋友之间的相互号码
  • 是的,子查询中的 users.user_id .. 有问题

标签: mysql


【解决方案1】:

我修改了您的尝试以获得所需的输出(但可能有更好的方法来获得您想要的输出)。

似乎主要问题是顶部外部查询中的users 表并非所有子查询都可以访问。所以我修改了需要这个表的子查询,让它可以通过其直接外层查询中的WHERE子句访问users表。

SELECT  users.username,users.user_id,

    (SELECT count(a.friendID) FROM
        (   SELECT user_two_id friendID, user_one_id where_id FROM friends
            UNION 
            SELECT user_one_id friendID, user_two_id where_id FROM friends
        ) AS a 
        JOIN  
        (   SELECT user_two_id friendID FROM friends WHERE user_one_id = 1
            UNION 
            SELECT user_one_id friendID FROM friends WHERE user_two_id = 1
        ) AS b 
        ON  a.friendID = b.friendID
        WHERE a.where_id = users.user_id
    ) as mutual_count

FROM friends LEFT JOIN  users    
ON friends.user_one_id = users.user_id or  friends.user_two_id = users.user_id  
WHERE (friends.user_one_id = 2 OR friends.user_two_id = 2)   AND users.user_id !=2
order by user_id

输出:

+----------+---------+--------------+
| username | user_id | mutual_count |
+----------+---------+--------------+
|   user3  |    3    |       3      |
+----------+---------+--------------+
|   user4  |    4    |       2      |
+----------+---------+--------------+
|   user5  |    5    |       2      |
+----------+---------+--------------+
|   user6  |    6    |       1      |
+----------+---------+--------------+
|   user7  |    7    |       0      |
+----------+---------+--------------+

修改后的行:

第 4 行: SELECT user_two_id friendID, user_one_id where_id FROM friends

第 6 行: SELECT user_one_id friendID, user_two_id where_id FROM friends

第 14 行: WHERE a.where_id = users.user_id

【讨论】:

  • IbrahimShendy 你永远是最棒的,谢谢亲爱的
猜你喜欢
  • 2014-09-11
  • 2014-08-26
  • 2017-05-03
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多