0

我正在使用 PHP 和 MySQL 开发一个自定义论坛。在这种情况下,我有三个主表:板、线程和消息。我想计算一个板上的消息数量。线程表有一个名为“first_msg_id”的列,它是对该线程的第一条消息的引用。我的查询不应该计算这条消息。

如果不存在 `forum_messages` 则创建表(
  `message_id` int(15) NOT NULL AUTO_INCREMENT,
  `thread_id` int(15) NOT NULL,
  `author_id` int(15) NOT NULL,
  `modifier_id` int(15) 默认为 NULL,
  `content` 文本不为空,
  `date_posted` 时间戳 NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `date_modified` 时间戳 NULL DEFAULT NULL,
  主键(`message_id`)
) 引擎=InnoDB 默认字符集=latin1;

如果不存在“forum_threads”,则创建表(
  `thread_id` int(15) NOT NULL AUTO_INCREMENT,
  `board_id` int(15) NOT NULL,
  `first_msg_id` int(15) 非空,
  `last_msg_id` int(15) 非空,
  `author_id` int(15) NOT NULL,
  `updater_id` int(15) NOT NULL,
  `title` 文本不为空,
  `date_posted` 时间戳 NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `date_updated` 时间戳 NOT NULL DEFAULT '0000-00-00 00:00:00',
  `views` int(15) NOT NULL,
  `status` tinyint(1) NOT NULL,
  `type` tinyint(1) NOT NULL COMMENT '0 正常,1 粘性,2 全局。',
  主键(`thread_id`)
) 引擎=InnoDB 默认字符集=latin1;

如果不存在 `forum_boards` 则创建表(
  `board_id` int(15) NOT NULL AUTO_INCREMENT,
  `parent_id` int(15) NOT NULL,
  `category_id` int(15) NOT NULL,
  `last_msg_id` int(15) 非空,
  `position` tinyint(1) NOT NULL,
  `title` 文本不为空,
  `description` 文本不为空,
  `status` tinyint(1) NOT NULL,
  `thread_count` int(15) NOT NULL,
  `reply_count` int(15) NOT NULL,
  主键(`board_id`)
) 引擎=InnoDB 默认字符集=latin1;

这是我的查询:

$query_board_replies = "
                    选择
                        m.message_id,m.thread_id,
                        t.thread_id,t.first_msg_id,t.board_id
                    FROM forum_messages AS m
                    LEFT JOIN forum_threads AS t ON t.first_msg_id != m.message_id
                    WHERE t.board_id = ".$board_id."
                    按 m.message_id 排序";

它不会返回任何错误,但它给了我一个完全不正确的计数。只有两个实际回复,但它在特定板上返回 18 个计数。

有任何想法吗?

4

1 回答 1

0

这应该这样做。

$query = "
  SELECT
    COUNT(*)
  FROM
    forum_messages A,
    forum_threads  B
  WHERE
    A.thread_id   = B.thread_id    AND
    A.message_id != B.first_msg_id AND
    B.board_id    = " . mysqli_real_escape_string($dbc, $board_id) . "
";
$rs = mysqli_query($dbc, $query);
list($count) = mysqli_fetch_array($rs);
echo $count;
于 2013-07-15T17:35:44.323 回答