繁体   English   中英

获取主题PHP中的帖子数

[英]Get number of posts in a topic PHP

如何显示论坛等主题的帖子数。 我用了这个...(多么讨厌):

function numberofposts($n)
{
    $sql = "SELECT * FROM posts
            WHERE topic_id = '" . $n . "'";

    $result = mysql_query($sql) or die(mysql_error());          
    $count = mysql_num_rows($result);           

    echo number_format($count);
}

清单主题的while循环:

<?php

$sql = "SELECT * FROM topics ORDER BY topic_id ASC LIMIT $start, $limit";
        $result = mysql_query($sql) or die(mysql_error());

while($row = mysql_fetch_array($result))
{
?>
<div class="topics">
    <div class="topic-name">
        <p><?php echo $row['topic_title']; ?></p>
    </div>
    <div class="topic-posts">
        <p><?php echo numberofposts($row['topic_id']); ?></p>
    </div>
</div>
<?php
}
?>

尽管这样做是一种不好的方法……我所要做的就是知道什么是最好的方法,不要只是将我指向一个网站,而是在这里进行,因为我正努力学习很多东西。 好的? :d

谢谢。

编辑:

SQL:

帖子表:

CREATE TABLE `posts` (
  `post_id` mediumint(8) NOT NULL AUTO_INCREMENT,
  `topic_id` mediumint(8) NOT NULL,
  `forum_id` mediumint(8) NOT NULL,
  `user_id` mediumint(8) NOT NULL,
  `post_time` varchar(100) NOT NULL,
  `post_timestamp` mediumint(20) NOT NULL,
  `post_ip` varchar(20) NOT NULL,
  `post_reported` tinyint(1) NOT NULL,
  `post_reportdesc` text NOT NULL,
  PRIMARY KEY (`post_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Dumping data for table `posts`
--

INSERT INTO `posts` VALUES(1, 1, 0, 1, '15th Junenee', 0, '', 0, '');

主题表:

CREATE TABLE `topics` (
  `topic_id` mediumint(8) NOT NULL AUTO_INCREMENT,
  `section_name` varchar(25) NOT NULL,
  `topic_title` varchar(120) NOT NULL,
  `topic_description` char(120) NOT NULL,
  `user_id` mediumint(8) NOT NULL,
  `topic_time` varchar(100) NOT NULL,
  `topic_views` varchar(1000) NOT NULL,
  `topic_up` mediumint(11) NOT NULL,
  `topic_down` mediumint(11) NOT NULL,
  `topic_status` tinyint(1) NOT NULL,
  PRIMARY KEY (`topic_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

这应该可以帮助您了解更多。

您可以使用:

"SELECT COUNT(topic_id) FROM posts WHERE topic_id = '?'"

的? 是一个占位符。 如果使用mysql,则应使用mysql_real_escape_string

$sql = "SELECT COUNT(topic_id)
        WHERE topic_id = '" . mysql_real_escape_string($n) . "'";

如果使用mysql_fetch_array ,则$row[0]将作为计数。 您可以命名,但这不是必需的。

更好的选择是某种准备的语句,例如PDOStatementmysqli_stmt 这有助于防止SQL注入。

如果只需要记录数,则可以改用此SQL查询:

SELECT COUNT(topic_id) AS 'count' WHERE topic_id = '123'

然后,在您执行以下操作之后:

$result = mysql_query($sql);
if ($result !== false)
{
    $row = mysql_fetch_assoc($result);
    if ($row !== false)
        echo('Number of rows = ' . $row['count']);
}
SELECT topic_title, COUNT(*) AS toipic_count
FROM topics
GROUP BY topic_id
ORDER BY topic_id ASC

然后,您将不再需要任何mysql查询,只需使用:

$row['topic_count']

列出主题时,应在联接中包括帖子数:

SELECT t.*, COUNT(p.post_id) AS post_count
FROM topic t LEFT JOIN posts p ON p.topic = t.topic_id 
GROUP BY t.topic_id

没花太多时间研究您的模式,但是您明白了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM