php - 特定条件下的 MySQL COUNT() 总帖子数?

标签 php sql mysql count aggregate-functions

我一直在想弄清楚我做错了什么,在我直接回答问题之前,让我稍微解释一下我的 MySQL 结构(以便您更好地理解)。

我有一个简单的 PHP 论坛,我在两个表(用于帖子和主题)中都有一个名为“已删除”的列,如果它等于 0,则表示它显示(被认为未删除/存在),或者如果它等于 1,则它隐藏(被认为已删除/不存在)- bool/lean。

现在,我正在讨论的“特定标准”...我想使用其 ID (forum_id) 获取特定论坛中的帖子总数,确保它只计算未删除的帖子(已删除= 0) 并且它们的父主题也没有被删除 (deleted = 0)。

列/表名称是不言自明的(如果需要,请参阅下面我为它们所做的努力)。

我尝试了以下方法(使用“简单”JOIN):

SELECT COUNT(t1.post_id) 
  FROM forum_posts AS t1, forum_topics AS t2 
 WHERE t1.forum_id = '{$forum_id}' 
   AND t1.deleted = 0 
   AND t1.topic_id = t2.topic_id 
   AND t2.deleted = 0 
 LIMIT 1

我也试过这个(使用子查询):

SELECT COUNT(t1.post_id) 
  FROM forum_posts AS t1 
 WHERE t1.forum_id = '{$forum_id}' 
   AND t1.deleted = 0 
   AND (SELECT deleted 
          FROM forum_topics 
         WHERE topic_id = t1.topic_id) = 0 
 LIMIT 1

但两者都不符合特定标准。

感谢所有帮助! :)

最佳答案

SELECT
   COUNT(*) AS total
FROM
   forum_topics
JOIN
   forum_posts ON topic_id
WHERE
   forum_topics.deleted = 0
   AND forum_posts.deleted = 0
   AND forum_posts.forum_id = '{$forum_id}'

这将使用 topic_id 连接两个表,并且只返回满足两个表的标准的结果 having deleted = 0 和所需的论坛 id。

关于php - 特定条件下的 MySQL COUNT() 总帖子数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4567272/

相关文章:

mysql - MySQL 上的 MD5(RAND()) 仅返回数字

php - 为 » 提供样式

PHP 扩展无法在 Web 目录中运行,而 .html 扩展可以运行

javascript - $jquery.post() PHP 和 Mysql

如果子查询没有结果,MySQL 应该返回行

mysql - Angularjs http.get 方法在某些 Mac 上失败

php - 使用 PHP 进行 XPath 查询

mysql - 3 个表的条目总和

mysql - 设置子祖 parent 关系

sql - 在 SQL Server (T-SQL) 中删除表的权限