Получить количество постов в теме PHP - PullRequest
0 голосов
/ 16 июня 2010

Как мне отобразить количество сообщений по теме, например по форуму.Я использовал это ... (как очень нубистски):

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 ;

Это должно помочь вам понять немного больше.

Ответы [ 4 ]

2 голосов
/ 16 июня 2010

Вы можете использовать:

"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]. Вы можете назвать это, но это не обязательно.

Лучшим вариантом являются подготовленные операторы, такие как PDOStatement или mysqli_stmt . Это помогает предотвратить внедрение SQL.

0 голосов
/ 16 июня 2010

Когда вы перечисляете темы, вы должны включить количество сообщений в объединение:

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

Не слишком изучал вашу схему, но вы поняли.

0 голосов
/ 16 июня 2010
SELECT topic_title, COUNT(*) AS toipic_count
FROM topics
GROUP BY topic_id
ORDER BY topic_id ASC

Тогда вам больше не понадобятся MySQL-запросы, просто используйте:

$row['topic_count']
0 голосов
/ 16 июня 2010

Вместо этого вы можете использовать этот 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']);
}
...