Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tvplus

[RESOLVIDO] Como retornar nº total de apenas uma coluna com Select?

Recommended Posts

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.