2010-06-15 6 views
0

Comment puis-je afficher le nombre de messages sur un sujet comme un forum. J'ai utilisé cette ... (comment très noobish):Obtenir le nombre de messages dans un sujet 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); 
} 

La boucle while de sujets: liste

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

Bien qu'il soit une mauvaise méthode de le faire ... Tout ce que je besoin est de savoir quelle serait la meilleure méthode, ne me signalez pas un site Web, faites-le ici, parce que j'essaie d'apprendre beaucoup. D'accord? : D

Merci.

EDIT:

SQL:

Table Messages:

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, ''); 

table Sujets:

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 ; 

Cela devrait vous aider à comprendre un mor bits e.

Répondre

2

Vous pouvez utiliser:

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

Le? est un place-titulaire. Si vous utilisez MySQL, vous devez utiliser mysql_real_escape_string:

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

Si vous utilisez mysql_fetch_array, $row[0] sera le comte. Vous pouvez le nommer mais ce n'est pas nécessaire. Une meilleure option est une sorte d'instructions préparées, telles que PDOStatement ou mysqli_stmt. Cela permet d'éviter l'injection SQL.

+0

"SELECT COUNT (topic_id) comme totalCount de messages OU topic_id = '?" Vous pouvez ensuite sélectionner la ligne "totalCount" –

+0

Woah, woah, woah, quel est le $ n? – MacMac

+0

Avez-vous écrit le code dans votre message original cos '$ n' est la même chose que vous l'avez écrit comme là (l'ID de sujet)! –

0

Vous pouvez utiliser cette requête SQL à la place si vous souhaitez que le nombre d'enregistrements:

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

Puis une fois que vous faites:

$result = mysql_query($sql); 
if ($result !== false) 
{ 
    $row = mysql_fetch_assoc($result); 
    if ($row !== false) 
     echo('Number of rows = ' . $row['count']); 
} 
+0

Je n'arrive pas à faire fonctionner ça ... pouvez-vous l'implémenter dans mon code, j'ai essayé de l'éteindre avec votre code dans le mien mais ça ne marche pas ... – MacMac

+0

Dites-moi ce qui suit pour que je comprenne plus votre question: topic_id est unique? Vous voulez afficher le titre du message ET la position du message dans la base de données? Cette position doit-elle être unique et ne jamais changer ou c'est juste pour le spectacle? – AlexV

+0

J'ai édité l'OP, ajouté les tables de base de données afin que vous puissiez voir ce qu'il y a. – MacMac

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

Ensuite, vous aurez pas besoin de plus mysql -querys, il suffit d'utiliser:

$row['topic_count'] 
0

Lorsque vous êtes sujets d'inscription, vous devez inclure le nombre de messages dans une jointure:

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 

n'a pas étudié votre schéma trop, mais vous obtenez le point.

Questions connexes