Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何基于3个表进行SQL计数_Mysql_Sql - Fatal编程技术网

Mysql 如何基于3个表进行SQL计数

Mysql 如何基于3个表进行SQL计数,mysql,sql,Mysql,Sql,我有三张表,我试图统计每个用户在他/她的所有帖子上喜欢的次数 用户表 id name 1 John 2 Joe id user_id post_title 1 1 Some Title 2 1 Another Title 3 2 Yeah Title id post_id 1 1 2 1 3 1 4 2 5 3 帖子表 id

我有三张表,我试图统计每个用户在他/她的所有帖子上喜欢的次数

用户表

id  name    
1   John    
2   Joe 
id  user_id     post_title
1   1           Some Title
2   1           Another Title
3   2           Yeah Title
id  post_id 
1   1   
2   1   
3   1   
4   2   
5   3   
帖子表

id  name    
1   John    
2   Joe 
id  user_id     post_title
1   1           Some Title
2   1           Another Title
3   2           Yeah Title
id  post_id 
1   1   
2   1   
3   1   
4   2   
5   3   
喜欢表格

id  name    
1   John    
2   Joe 
id  user_id     post_title
1   1           Some Title
2   1           Another Title
3   2           Yeah Title
id  post_id 
1   1   
2   1   
3   1   
4   2   
5   3   
我的预期产出是

ID LIKES
1  4
2  1
我被下面的代码卡住了。我不知道如何添加和计算表

SELECT *
FROM user
INNER JOIN posts
ON user.id = posts.user_id;

您需要将连接扩展到LIKES表,然后使用
groupby
按用户ID和
COUNT()对该用户的所有记录进行分组

SELECT user.id, COUNT(likes.id)
    FROM user
    INNER JOIN posts ON user.id = posts.user_id
    INNER JOIN likes ON posts.id = likes.post_id
    GROUP BY user.id

如果要列出没有帖子或喜欢的人,则应使用外部联接(因此将内部联接更改为左联接),以便显示这些用户。

对于所需的结果,您不需要
用户
表。您可以简单地执行以下操作:

SELECT p.user_id, COUNT(*)
FROM posts p JOIN
     likes l
     ON l.post_id = p.id
GROUP BY p.user_id;
您从用户处获取的唯一信息是
id
,它已经在
帖子中了。这假设
posts
中的所有
user\u id
值都是有效的,但这似乎是一个非常合理的假设