如何计算一列与另一个表的列匹配的行数


How to COUNT the number of rows where a column matches a column of another table

我想显示用户发布的帖子数量,但我有几个不同的表,需要匹配 ID 并对其进行计数。

像这样:

用户表

userid       username      email              regdate
  34          mister      email@some.tld    2013-10-26 12:01:07

帖子表

postid       creator        post_comment      post_title     status
  1            34          This is comment    Post 1         published
  2            12          This is comment    Post 2         published
  3            34          This is comment    Post 3         pending
  4            25          This is comment    Post 4         published
  5            34          This is comment    Post 5         published

现在我已经有一个查询,我从 users 表中选择有关特定用户的所有数据:

mysqli_query($conn, "SELECT * FROM users WHERE userid = $userid");

$userid是当前登录的用户的 ID。这工作正常:它选择有关该用户的所有相关信息。

但我想显示每个用户发布的帖子数量。我在w3schools的某个地方读到SQL COUNT函数的工作方式如下:

mysqli_query($conn, "SELECT COUNT(creator) AS userposts FROM posts WHERE creator=$userid");

但是,正如您在发布的表格示例中所看到的,在 5 个帖子中,有 3 个来自用户 34,其中 1 个未发布。

我不知道如何进行SQL查询,选择userid与$userid匹配的所有用户,然后从帖子中选择创建者和状态,并计算创建者$userid和状态发布的帖子数量。

这是我最终目标的输出:

用户先生发布了 2 个帖子。

为了仅获取已发布帖子的数量,您应该通过 AND 重构条件语句status = 'published'

mysqli_query($conn, "SELECT COUNT(creator) AS num_posts FROM posts 
WHERE creator=$userid AND status = 'published'");
SELECT COUNT(creator) AS userposts FROM posts p 
LEFT JOIN users u ON p.creator=u.userid 
WHERE creator=$userid AND status='published'

正如您在评论中询问的那样,所有这些都在一个查询中:

SELECT users.*, COUNT(creator) AS userposts FROM users u 
LEFT JOIN posts p ON p.creator = u.userid 
WHERE p.creator = $userid AND p.status = 'published'