我想显示用户发布的帖子数量,但我有几个不同的表,需要匹配 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'