PHP と MySQL を使用してカスタム フォーラムを開発しています。このシナリオには、ボード、スレッド、およびメッセージの 3 つの主要なテーブルがあります。ボード内のメッセージの数を数えたいと思います。スレッド テーブルには、そのスレッドの最初のメッセージへの参照である「first_msg_id」という列があります。私のクエリは、このメッセージをカウントすべきではありません。
CREATE TABLE IF NOT EXISTS `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) DEFAULT NULL, `content` テキスト NOT NULL, `date_posted` タイムスタンプ NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `date_modified` タイムスタンプ NULL DEFAULT NULL, 主キー (`message_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `forum_threads` ( `thread_id` int(15) NOT NULL AUTO_INCREMENT, `board_id` int(15) NOT NULL, `first_msg_id` int(15) NOT NULL, `last_msg_id` int(15) NOT NULL, `author_id` int(15) NOT NULL, `updater_id` int(15) NOT NULL, `title` テキスト NOT NULL, `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`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `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) NOT NULL, `position` tinyint(1) NOT NULL, `title` テキスト NOT NULL, `description` テキスト NOT NULL, `status` tinyint(1) NOT NULL, `thread_count` int(15) NOT NULL, `reply_count` int(15) NOT NULL, 主キー (`board_id`) ) ENGINE=InnoDB DEFAULT CHARSET=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." ORDER BY m.message_id";
エラーは返されませんが、完全に間違ったカウントが返されます。実際の応答は 2 つしかありませんが、特定のボードで 18 のカウントを返しています。
何か案は?