我正在使用 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 个计数。
有任何想法吗?