Mysql 如何从3个具有相同用户id的表中获取数据?

Mysql 如何从3个具有相同用户id的表中获取数据?,mysql,sql,Mysql,Sql,我有三张这样的桌子 表1:用户信息 user_id userName 表2:员额 user_id postContent 表3:LikePost user_id likesPostId 我想运行一个查询,从这3个表中获取喜欢的帖子、帖子和用户信息的总数 我可以为每一个这样做,例如在Post表中: SELECT COUNT(*) FROM Post WHERE Post.user_id = '123' 然后从UserInfo中选择*,其中UserInfo.us

我有三张这样的桌子

表1:用户信息

user_id   userName   
表2:员额

user_id   postContent   
表3:LikePost

user_id   likesPostId   
我想运行一个查询,从这3个表中获取喜欢的帖子、帖子和用户信息的总数

我可以为每一个这样做,例如在Post表中:

SELECT COUNT(*) FROM Post WHERE Post.user_id = '123'
然后
从UserInfo中选择*,其中UserInfo.user\u id='123'

是否有人能在一个查询中找到更好的解决方案?非常感谢你

试试这个

SELECT ui.userName,Count(p.*),
Count(lp.*) as TotalPostLikes
 FROM UserInfo ui 
INNER JOIN Post p on p.user_id=ui.user_id
INNER JOIN LikePost lp on lp.user_id=ui.user_id
WHERE ui.user_id = '123'
GROUP BY ui.userName 
如果您想在帖子中选择Username、Post和Likes,请尝试以下操作

 SELECT ui.userName,p.postContent as PostContent,
        (SELECT COUNT(lp.user_id) FROM LikePost lp 
    WHERE lp.user_id=ui.user_id) as Likes,

(SELECT COUNT(_p .user_id) FROM Post _p 
    WHERE _p .user_id=ui.user_id) as TotalPosts

     FROM UserInfo ui 
    INNER JOIN Post p on p.user_id=ui.user_id
    WHERE ui.user_id = '123'
使用这样的结构化查询(带子查询)

 SELECT u.user_id, u.userName, p.num postcount, l.num likecount
   FROM UserInfo u
   LEFT JOIN (
                 SELECT COUNT(*) num, 
                        user_id
                   FROM Post
                  GROUP BY user_id
        ) p ON u.user_id = p.user_id
   LEFT JOIN (
                 SELECT COUNT(*) num, 
                        user_id
                   FROM LikePost
                  GROUP BY user_id
        ) l ON u.user_id = l.user_id
这是怎么回事?例如,这两个子查询

                 SELECT COUNT(*) num, 
                        user_id
                   FROM LikePost
                  GROUP BY user_id
每个用户生成一个虚拟表,每个用户id为零或一行,显示每个用户id的计数。然后将这些虚拟表连接到UserInfo表


使用
LEFT JOIN
,因为普通Inner
JOIN
将禁止缺少帖子或喜欢的用户。

是的,您可以使用
Post
上的
LEFT JOIN
和下面的
LikePost
在一次查询中完成

SELECT COUNT(*),User.userName FROM UserInfo as User
leftjoin  Post as Post on Post.user_id = User.user_id
leftjoin  LikePost as LikePost on LikePost.user_id = User.user_id      
where Post.user_id = 123
group by Post.user_id

不幸的是,这种方法计算帖子和喜欢的产品。@O.Jones,是的,如果您需要选择用户名、当前用户的帖子和当前用户的喜欢,请尝试第二次查询,以防混淆。我刚刚尝试了你的答案,但是它缺少post countUpdated for number of Posts Hanks for a updated,但是代码只返回1 for post和1 for likes,即使我认为两者都不止1个。谢谢你的回复,但是我应该在哪里输入用户Id,例如:'123“或'333'我还测试了代码并得到了这个错误:字段列表中的未知列user_id谢谢您的回复,但代码只返回count(*)和用户名。我希望它会显示像计数,后计数列与用户信息以及。
 SELECT u.user_id, u.userName, p.num postcount, l.num likecount
   FROM UserInfo u
   LEFT JOIN (
                 SELECT COUNT(*) num, 
                        user_id
                   FROM Post
                  GROUP BY user_id
        ) p ON u.user_id = p.user_id
   LEFT JOIN (
                 SELECT COUNT(*) num, 
                        user_id
                   FROM LikePost
                  GROUP BY user_id
        ) l ON u.user_id = l.user_id
                 SELECT COUNT(*) num, 
                        user_id
                   FROM LikePost
                  GROUP BY user_id
SELECT COUNT(*),User.userName FROM UserInfo as User
leftjoin  Post as Post on Post.user_id = User.user_id
leftjoin  LikePost as LikePost on LikePost.user_id = User.user_id      
where Post.user_id = 123
group by Post.user_id