【问题标题】:MySQL COUNT() total posts within a specific criteria?MySQL COUNT() 特定条件内的帖子总数?
【发布时间】:2011-06-01 19:44:55
【问题描述】:

我一直在试图弄清楚我做错了什么,让我先解释一下我的 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

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

感谢所有帮助! :)

【问题讨论】:

    标签: php sql mysql count aggregate-functions


    【解决方案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 连接两个表,并且仅返回满足两个表已删除 = 0 和所需论坛 id 的条件的结果。

    【讨论】:

      【解决方案2】:

      我不确定我是否理解您的问题,但您可以从以下查询开始并对其进行微调以执行您想要的操作:

      SELECT COUNT(*) 
      FROM topic_posts AS TP
      WHERE forum_id='{$forum_id}' AND
        deleted=0 AND                -- Count topic posts that are not deleted and...
        NOT EXISTS (                 -- make sure they are not for a deleted forum
          SELECT * FROM forum_posts 
          WHERE forum_id=TP.forum_id and 
          deleted<>0)
      

      我在查询中添加了 cmets 以帮助您。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-20
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多