获取正确的MAX结果,但不是MySQL中用于留言板的正确COUNT值

时间:2015-05-01 17:23:18

标签: php mysql count left-join

这是我第一次来Stack。我正在尝试使用PHPMySQL构建留言板(论坛)。我想在PHP中显示一个表格,其中包含以下信息:

  1. 显示所有当前论坛的一栏
  2. 另一列显示每个主题的帖子和帖子总数 论坛。
  3. 显示最新创建的主题的最后一栏。
  4. 这是我的查询返回正确的最新线程,但不是正确的计数:

    SELECT 
           forums.*,
           threads.thread_id,
           threads.thread_topic,
           threads.user_id,
           users.user_name, 
           threads.thread_date, 
           COUNT(DISTINCT threads.thread_id) AS thread_count,
           COUNT(DISTINCT posts.post_id) AS post_count
       FROM forums 
       LEFT OUTER JOIN threads
          ON forums.forum_id = threads.forum_id
          AND threads.thread_date = 
             (SELECT MAX(threads.thread_date) AS last_topic
                 FROM threads 
                 WHERE forums.forum_id = threads.forum_id)
       LEFT JOIN users 
          ON users.user_id = threads.user_id
       LEFT JOIN posts 
          ON threads.thread_id = posts.thread_id
       GROUP BY forums.forum_id
    

    这些是帖子和帖子计数的结果,它只计算每个论坛最新帖子中的主题和帖子:

    post count  thread count
        -             -
        7             1
        1             1
        1             1
        1             1
        0             0
    

    此查询为每个论坛获取正确的帖子和帖子计数:

    SELECT 
           COUNT(DISTINCT posts.post_id) AS post_count, 
           COUNT(DISTINCT threads.thread_id) AS thread_count
       FROM forums 
       LEFT OUTER JOIN threads 
          ON threads.forum_id = forums.forum_id
       LEFT JOIN posts 
          ON threads.thread_id = posts.thread_id
       GROUP BY forums.forum_id;
    

    每个论坛的帖子和帖子数量的结果应为:

    post count  thread count
            -             -
            7             1
            1             1
            3             2
            1             1
            0             0
    

    无论如何,我可以将两个查询组合起来,或者修复第一个查询,这样我得到了正确的输出吗?

    请在您的建议中使用以下表格:

    users, threads, forums, posts

    我是PHPMySQL的新手,所以如果不是这样做的话,我很抱歉。

    非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

 while($array = mysql_fetch_array($query)){
    echo '<option value ='."$array[fname]".'>'.$array[fname].$array[lname].'</opton>';
    }