php
  • mysql
  • function
  • while-loop
  • 2010-06-15 3 views 0 likes 
    0

    Как получить количество сообщений в теме, например форуме. Я использовал это ... (как очень noobish):Получить количество сообщений в теме 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); 
    } 
    

    это время цикл листинга темы:

    <?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

    Спасибо.

    EDIT:

    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 ; 
    

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

    ответ

    2

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

    "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

    "SELECT COUNT (topic_id) как TOTALCOUNT FROM сообщений WHERE topic_id = '?'" Вы можете выбрать строку "TOTALCOUNT" –

    +0

    Woah, во, во, что такой $ п? – MacMac

    +0

    Вы пишете код в своем исходном post cos '$ n' - это то же самое, что вы написали его там (идентификатор темы)! – 2010-06-15 20:49:50

    0

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

    Я не могу заставить это работать ... Можете ли вы реализовать его для моего кода, я попытался поместить его с кодом в мой, но он не работает ... – MacMac

    +0

    Скажите мне следующее, чтобы я понял больше вашего вопроса: topic_id уникален? Вы хотите отобразить заголовок сообщения И позицию позиции в базе данных? Должна ли эта позиция быть уникальной и никогда не меняться или это просто для шоу? – AlexV

    +0

    Я отредактировал OP, добавил таблицы базы данных, чтобы вы могли видеть, что есть. – MacMac

    0
    SELECT topic_title, COUNT(*) AS toipic_count 
    FROM topics 
    GROUP BY topic_id 
    ORDER BY topic_id ASC 
    

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

    $row['topic_count'] 
    
    0

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

    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 
    

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

    Смежные вопросы