Mysql 如何从3个具有相同用户id的表中获取数据?
我有三张这样的桌子 表1:用户信息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
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
,因为普通InnerJOIN
将禁止缺少帖子或喜欢的用户。是的,您可以使用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