0

我想显示用户发布的帖子数,但我有几个不同的表,需要匹配 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 的某个地方读到 SQLCOUNT函数的工作原理是这样的:

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

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

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

这是我最终目标的输出:

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

4

3 回答 3

2

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

mysqli_query($conn, "SELECT COUNT(creator) AS num_posts FROM posts 
WHERE creator=$userid AND status = 'published'");
于 2013-10-26T21:52:21.683 回答
0

正如您在评论中所问的那样,一站式查询:

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'
于 2014-06-20T09:38:15.450 回答
0
SELECT COUNT(creator) AS userposts FROM posts p 
LEFT JOIN users u ON p.creator=u.userid 
WHERE creator=$userid AND status='published'
于 2013-10-26T21:49:35.437 回答