tvplus 0 Denunciar post Postado Junho 24, 2007 Como faço pra retornar quantas respostas tem um determinado tópico, sendo que na coluna onde é salvo repete o ID? Vou postar aqui a tabela pra ficar melhor. CREATE TABLE `forum` ( `id` int(11) NOT NULL auto_increment, `autor` varchar(255) collate latin1_general_ci default NULL, `titulo` varchar(255) collate latin1_general_ci default NULL, `mensagem` mediumtext collate latin1_general_ci, `pai` int(11) default NULL, `topico` int(11) NOT NULL default '0', `pdate` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `pdate` (`pdate`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=176;Tentei fazer o SelecT assim, mais não deu certo, ele retorna o numero total de topicos e não apenas o número de respostas do topico ID 5 por exemplo. $sql = "SELECT COUNT(topico) as topicos FROM forum WHERE topico = topico";$respostas = mysql_query($sql);O que eu fiz de errado? Obs: o ID de cada topico é salvo na coluna TOPICO. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 24, 2007 Você tem que usar o Group By quando utiliza Count(nome_do_campo). Pelo que entendi, você poderá solucionar o problema assim: Select topico, count(topico) as respostas From forum Group By topico; Veja se é isso que você quer. ;) Abraços, Beraldo Compartilhar este post Link para o post Compartilhar em outros sites
tvplus 0 Denunciar post Postado Junho 24, 2007 Beraldo, Não deu certo, veja aqui http://www.tvplus.com.br/site/forum/danilo.php Porque será que não está contando corretamente? :huh: Vou postar aqui a página que lista os topicos com esse Select pra contar as respostas. <table align="center" border="0" width="100%" cellpadding="0" cellspacing="2"><tr> <td height="25"></td></tr></table> <?phpinclude "../config.php";global $connection;// Total de registros pra fazer a paginação$sql=mysql_query("SELECT * FROM forum"); $total=mysql_num_rows($sql); // Declaração da pagina inicial if($pagina=="") { $pagina="1"; } // Maximo de registros por pagina $maximo="20"; // Calculando o registro inicial $inicio=$pagina-1; $inicio=$maximo*$inicio; // Query no qual o script se basea $query=mysql_query("SELECT *, DATE_FORMAT(pdate, '%d/%m/%Y') as date FROM forum WHERE pai = 0 ORDER BY pdate DESC LIMIT $inicio,$maximo"); ?><div align="center"> <table border="0" width="592" cellspacing="0" cellpadding="2" background="../imagens/fundo_forum.jpg"> <tr> <td width="350" height="25"><b>Em Pauta...</b></td> <td width="120" height="25" align="center"><b>Autor</b></td> <td width="87" height="25" align="center"><b>Criado</b></td> <td width="35" height="25" align="center"><b>Resp.</b></td> </tr></table><div align="center"> <table border="0" width="592" cellspacing="0" cellpadding="2"><?php// Mostragem dos dados while($row = mysql_fetch_array($query)) { $id = $row['id'];$autor = $row['autor'];$titulo = $row['titulo'];$topico = $row['topico'];$data = $row['date'];?> <?php// Contando as respostas$danilo = "Select topico, count(topico) as respostas From forum Group By topico";$resposta = mysql_query($danilo);?> <tr> <td width="350" background="../imagens/lineforum.gif" bgcolor="#EBEFF5" height="25"><font face="Verdana" size="2"><a href="topico.php?topico=<?php echo $topico; ?>"><?php echo $titulo; ?></a></td> <td width="120" background="../imagens/lineforum.gif" bgcolor="#F1F8FE" height="25" align="center"><?php echo $autor; ?></td> <td width="87" background="../imagens/lineforum.gif" bgcolor="#EBEFF5" height="25" align="center"><?php echo $data; ?></td> <td width="35" background="../imagens/lineforum.gif" bgcolor="#F1F8FE" height="25" align="center"><?php echo @mysql_result($resposta,0,'respostas'); ?></td> </tr><?} ?> <tr> <td colspan="4" width="374" background="../imagens/lineforum.gif" bgcolor="#EBEFF5" ></td> </tr> <tr> <td colspan="4" background="../imagens/fundo_forum.jpg" height="12"></td> </tr> </table> </div><?// Calculando pagina anterior $menos=$pagina-1; // Calculando pagina posterior $mais=$pagina+1; // Calculos para a mostragem de paginas $p_ini=$mais-1; $p_ini=$maximo*$p_ini; // Querys para a mostragem de paginas $p_query=mysql_query("SELECT * FROM forum LIMIT $p_ini,$maximo"); $p_total=mysql_num_rows($p_query); // Mostragem de pagina if($menos>0) { echo "<a href=\"?pagina=$menos\">:: anterior</a> "; } if(mysql_num_rows($p_query)>0) { echo " <a href=\"?pagina=$mais\"> proxima ::</a>"; } ?> <br> <form style="margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0;"><?// Listando as paginas $i=1; $pgs=$total/$maximo; $formatado=number_format($pgs); if($formatado<$pgs) { $formatado=$formatado+1; } ?><?php// Contando quantos topicos existe$sql = "SELECT COUNT(topico) as topicos FROM forum WHERE pai = 0";$exec = mysql_query($sql);?><table border="0" width="590" align="center"><tr><td width="70%">Temos <b><?php echo @mysql_result($exec,0,'topicos'); ?></b> Tópicos e <b><?php echo $total; ?></b> Mensagens no Fórum.</td><td width="30%" align="right">Página <select name="selector" onChange="eval(this.options[this.selectedIndex].value)" size="1"><?while($i<=$formatado) { echo "<option value=\"parent.location.href='?pagina=$i';\">$i</option> \n"; $i++; } ?> </select> de <b><?php echo $formatado; ?></b> Páginas</td></form></tr></table> Obs: Acho que fiz um monte de SelecT sem necessidade, estou aprendendo, então, por gentileza não vão dar risada de mim http://forum.imasters.com.br/public/style_emoticons/default/grin.gif Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 24, 2007 Pelo que percebi, você inderiu o código que eu postei dentro de um laço que apresenta os tópicos do fórum. Se você quiser manter o código dessa forma, terá de realizar o select desta forma: Select count(*) as respostas From forum Where topico = CÓDIGO_CORRENTE_DO_LOOP Nesse caso, você deverá colocar no lugar de "CÓDIGO_CORRENTE_DO_LOOP" a variável que contém o código do tópico corrente. A melhor maneira é fazer somente um select, sem pecisar fazer uma consulta a cada loop, deixando a execução mais rápida. Abraços, Beraldo Compartilhar este post Link para o post Compartilhar em outros sites
tvplus 0 Denunciar post Postado Junho 25, 2007 Beraldo, Valeu brother, agora consegui fazer, e estou usando seu SELECT mesmo. $sql = "SELECT COUNT(*) as topicos FROM forum WHERE topico = '$topico'";$exec = mysql_query($sql); Compartilhar este post Link para o post Compartilhar em outros sites