Php 我如何计算我的自定义论坛板中的回复数?

Php 我如何计算我的自定义论坛板中的回复数?,php,mysql,join,Php,Mysql,Join,我正在用PHP和MySQL开发一个自定义论坛。在这个场景中,我有三个主要表:板、线程和消息。我想数一数黑板上的信息数。threads表有一个名为“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

我正在用PHP和MySQL开发一个自定义论坛。在这个场景中,我有三个主要表:板、线程和消息。我想数一数黑板上的信息数。threads表有一个名为“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` text NOT NULL, `date_posted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `date_modified` timestamp NULL DEFAULT NULL, PRIMARY KEY (`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` text NOT NULL, `date_posted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `date_updated` timestamp 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 normal, 1 sticky, 2 global.', PRIMARY KEY (`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` text NOT NULL, `description` text NOT NULL, `status` tinyint(1) NOT NULL, `thread_count` int(15) NOT NULL, `reply_count` int(15) NOT NULL, PRIMARY KEY (`board_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 如果不存在“论坛消息”,则创建表( `消息id`int(15)非空自动增量, `线程id`int(15)不为空, `作者id`int(15)不为空, `修饰符_id`int(15)默认为空, `content`文本不为空, `date_posted`timestamp NOT NULL更新当前时间戳时的默认当前时间戳, `date_modified`时间戳为空默认为空, 主键(`message_id`) )ENGINE=InnoDB默认字符集=1; 如果不存在“论坛线程”,则创建表( `线程id`int(15)非空自动增量, `board_id`int(15)不为空, `第一个消息id`int(15)不为空, `last_msg_id`int(15)不为空, `作者id`int(15)不为空, `更新程序_id`int(15)不为空, `标题`文本不为空, `date_posted`timestamp NOT NULL更新当前时间戳时的默认当前时间戳, `更新日期“时间戳非空默认值”0000-00-00:00:00”, `视图`int(15)不为空, `状态'tinyint(1)不为空, `键入'tinyint(1)NOT NULL注释'0普通,1粘性,2全局', 主键(`thread\u id`) )ENGINE=InnoDB默认字符集=1; 创建表(如果不存在)`forum_boards`( `线路板id`int(15)非空自动增量, `父_id`int(15)不为空, `类别_id`int(15)不为空, `last_msg_id`int(15)不为空, `位置'tinyint(1)不为空, `标题`文本不为空, `description`文本不为空, `状态'tinyint(1)不为空, `线程计数'int(15)不为空, `答复_count`int(15)不为空, 主键(`board_id`) )ENGINE=InnoDB默认字符集=1; 这是我的疑问:

$query_board_replies = " SELECT 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"; $query\u board\u responses=” 挑选 m、 消息标识,m.thread标识, t、 线程id,t.first\U消息id,t.board\U id 来自论坛_的消息为m 在t.first\u msg\u id!=m.message\u id上以t的形式左键加入论坛\u线程 其中t.board_id=“.$board_id.” 按m.message_id”订购; 它没有返回任何错误,但它给了我一个完全不正确的计数。只有两个实际的回复,但它在一个特定的板上返回了18个

有什么想法吗?

这个就行了

$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;

你想要一个计数还是一个消息列表?谢谢你的回复,但是对于每个单板,即使是没有任何线程或回复的单板,也会返回一个计数1。一个计数1,还是一条记录?它显示了一条记录,但我改变了它并使它工作了!很好,是的,这将始终返回一条包含计数的记录,我只是更新了答案以澄清这一点。如果需要对记录进行计数,那么在PHP中永远不要对它们进行计数,使用MySQL count函数,让数据库只返回找到的数字。