许多论坛和网站在帖子或表格中显示用户信息(当您查看超过 1 个用户时)
例如,您可能有一个论坛主题,其中的每个帖子都显示有关海报的信息,如下所示:
姓名:约翰 电子邮件:email@email.com 帖子:450
他们可能有一个用于存储姓名和电子邮件的用户表,然后是一个用于帖子的表。
我能想到的唯一想法是在每次用户发布时在用户表中的一行(对应于发布帖子的用户)中添加 1,这似乎是一个不好的解决方案我。
他们如何计算每个用户的帖子数量?
他们使用 SQLCOUNT()
函数来动态生成计数:
SELECT COUNT( *) FROM posts WHERE user_id = 1
这将计算posts
表中符合条件的用户写入的行数user_id = 1
。
要在一个查询中执行此操作,您可以使用 JOIN 和 GROUP BY 标识符,如下所示:
SELECT username, user_email, COUNT( p.post_id) as num_posts
FROM users u
LEFT JOIN posts p
ON p.user_id = u.user_id
WHERE u.user_id = 1
GROUP BY u.user_id
假设电子邮件在用户表中是唯一的,您可以执行以下操作:
SELECT u.name, u.email, count(*)
FROM users u, posts p
WHERE u.user_id = p.user_id
GROUP BY u.email;