Mysql 联接表和计数的正确方法
假设我有三张桌子。 它们被称为用户、线程、帖子。我需要知道有多少帖子和帖子 用户已在一个sql行中创建。最好的方法是什么?我想做如下的连接,这是正确的/最好的方法吗?但我如何计算呢Mysql 联接表和计数的正确方法,mysql,join,count,Mysql,Join,Count,假设我有三张桌子。 它们被称为用户、线程、帖子。我需要知道有多少帖子和帖子 用户已在一个sql行中创建。最好的方法是什么?我想做如下的连接,这是正确的/最好的方法吗?但我如何计算呢 SELECT *, FROM users LEFT JOIN threads on threads.user_id=users.user_id LEFT JOIN posts on posts.user_id=users.user_id WHERE user_id='1' 首先,在选择*后有一个逗号。第二,当需要线
SELECT *,
FROM users
LEFT JOIN threads on threads.user_id=users.user_id
LEFT JOIN posts on posts.user_id=users.user_id
WHERE user_id='1'
首先,在
选择*
后有一个逗号。第二,当需要线程和帖子时,为什么要查询用户表?第三,为什么(它?)是userid
achar
SELECT COUNT(user_id) FROM threads WHERE user_id='1'
SELECT COUNT(user_id) FROM posts WHERE user_id='1'
如果希望在一个查询中使用UNION,请使用UNION。首先,在
选择*
后有一个逗号。第二,当需要线程和帖子时,为什么要查询用户表?第三,为什么(它?)是userid
achar
SELECT COUNT(user_id) FROM threads WHERE user_id='1'
SELECT COUNT(user_id) FROM posts WHERE user_id='1'
SELECT
COUNT() as posts,
FROM users
LEFT JOIN threads on threads.user_id=users.user_id
LEFT JOIN posts on posts.user_id=users.user_id
WHERE user_id='1'
如果希望在一个查询中使用UNION,请使用UNION。您可以使用类似的方法应用和聚合函数来获取总计数:
SELECT
COUNT() as posts,
FROM users
LEFT JOIN threads on threads.user_id=users.user_id
LEFT JOIN posts on posts.user_id=users.user_id
WHERE user_id='1'
SELECT u.user_id,
coalesce(TotalThreads, 0) + coalesce(TotalPosts, 0) Total
FROM users u
LEFT JOIN
(
select user_id, count(thread_id) TotalThreads
from threads
group by user_id
) t
on t.user_id=u.user_id
LEFT JOIN
(
select user_id, count(post_id) TotalPosts
from posts
group by user_id
) p
on p.user_id=u.user_id
WHERE u.user_id='1'
如果要将这些值分开,则:
SELECT u.user_id,
coalesce(TotalThreads, 0) TotalThreads,
coalesce(TotalPosts, 0) TotalPosts
FROM users u
LEFT JOIN
(
select user_id, count(thread_id) TotalThreads
from threads
group by user_id
) t
on t.user_id=u.user_id
LEFT JOIN
(
select user_id, count(post_id) TotalPosts
from posts
group by user_id
) p
on p.user_id=u.user_id
WHERE u.user_id='1'
您可以使用类似这样的应用和聚合函数来获取总计数:
SELECT u.user_id,
coalesce(TotalThreads, 0) + coalesce(TotalPosts, 0) Total
FROM users u
LEFT JOIN
(
select user_id, count(thread_id) TotalThreads
from threads
group by user_id
) t
on t.user_id=u.user_id
LEFT JOIN
(
select user_id, count(post_id) TotalPosts
from posts
group by user_id
) p
on p.user_id=u.user_id
WHERE u.user_id='1'
如果要将这些值分开,则:
SELECT u.user_id,
coalesce(TotalThreads, 0) TotalThreads,
coalesce(TotalPosts, 0) TotalPosts
FROM users u
LEFT JOIN
(
select user_id, count(thread_id) TotalThreads
from threads
group by user_id
) t
on t.user_id=u.user_id
LEFT JOIN
(
select user_id, count(post_id) TotalPosts
from posts
group by user_id
) p
on p.user_id=u.user_id
WHERE u.user_id='1'
这样行吗
从用户u、线程t、帖子p中选择计数(*)
其中t.user\u id=u.user\u id
p.user\u id=u.user\u id
和用户_id='1'
我对SQL不感兴趣…这样行吗
从用户u、线程t、帖子p中选择计数(*)
其中t.user\u id=u.user\u id
p.user\u id=u.user\u id
和用户_id='1'
我对SQL不感兴趣…你基本上已经做到了。由于
count
是一个组,因此您只需按用户id
进行分组即可:
select users.user_id as [User ID]
,count(threads.user_id) as [Number of Threads]
,count(posts.user_id) as [Number of Posts]
from users
left join threads on threads.user_id = users.user_id
left join posts on posts.user_id = users.user_id
where user_id = '1'
group by users.user_id
这样,您的
where
子句就成为可选的。如果您想要一个包含所有用户及其对应线程/帖子计数的独特列表,您可以将其删除。基本上就在这里。由于count
是一个组,因此您只需按用户id
进行分组即可:
select users.user_id as [User ID]
,count(threads.user_id) as [Number of Threads]
,count(posts.user_id) as [Number of Posts]
from users
left join threads on threads.user_id = users.user_id
left join posts on posts.user_id = users.user_id
where user_id = '1'
group by users.user_id
这样,您的
where
子句就成为可选的。如果您想要一个包含所有用户及其对应线程/帖子计数的独特列表,您可以将其删除。如果您只有一个用户id,则不需要。因为WHERE
@BartFriederichs yes,这就是为什么我说WHERE
是可选的。如果有多个用户,只需将其删除,就可以按用户id(或任何其他列,如用户名)对其进行分组。。。或者你可以像他们在本例中所做的那样针对特定的用户。如果你只有一个用户id,则不需要。你这样做是因为WHERE
@BartFriederichs是,这就是为什么我说WHERE
是可选的。如果有多个用户,只需将其删除,就可以按用户id(或任何其他列,如用户名)对其进行分组。。。或者你也可以像他们在本例中所做的那样针对特定用户。没错,但是一个想法可能会有所帮助。请使用注释部分进行说明。或者尝试一下你的想法,确保它有效,然后给出答案。没错,但是一个想法可能会有帮助。请使用评论部分。或者尝试一下你的想法,确保它有效,然后给出答案。