Ir para conteúdo
Fórum Script Brasil
  • 0

Sistema de top?


SrMaster

Pergunta

Oi, gostaria de saber se alguém me ajuda fazer um sistema de top com os tópicos mais comentados, tipo, os comentários ficam numa tabela, comentarios, os tópicos ficam na tabela topicos, selecionaria 4 tópicos, e contaria quantos comentários tem na tabela comentarios, as que tivesse mais listava lá, entende?

Tipo um "select * from topicos order by total_de_comentarios desc limit 4"

mas não sei muito bem comofas...

Obrigado, acho que entenderam :huh:

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

Com duas querys daria pra fazer simples...

$query1 = mysql_query("SELECT COUNT(*) AS `qtdecomments`, `noticia_id` FROM `comentarios` GROUP BY `noticias_id` LIMIT 0,4 ORDER BY `qtdecomments` DESC");

while($r1 = mysql_fetch_assoc($query1)){
     query2 = mysql_query("SELECT * FROM `topicos` WHERE `id` = ".$r1['noticia_id']."");
     while($r2 = mysql_fetch_assoc($query2)){
          $resultado[]['titulo'] = $r2['titulo'];
          $resultado[]['comentarios'] = $r1['qtdecomments'];
     }
}

Cria o array $resultado, bidimensional, com o titulo do tópico e quantos comentários ele tem.

Sem conhecer certinho a modelagem do banco de dados e do sistema é dificil pensar em algo melhor.

Link para o comentário
Compartilhar em outros sites

  • 0
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/senha123/public_html/freestepzone/index.php on line 683

comofas/

tem algo errado na query1, não consegui achar.

Coloquei GROUP BY `noticias_id`

vai ver é isto.

Também pode ser que o nome de alguma coisa esta errada aí no meio, é meio dificil eu acertar a query sem conhecer o sistema.

Este erro do mysql_fetch_assoc ocorre porque a query não atribuiu o recurso á variável $query1. Significa que a query falhou.

Link para o comentário
Compartilhar em outros sites

  • 0

Que tenso, tá certo...

<div id="mais-comentadas-content">      
<?php          
$query1 = mysql_query("SELECT COUNT(*) AS `qtdecomments`, `musica_id` FROM `comentarios_musica` GROUP BY `musicas_id` LIMIT 0,4 ORDER BY `qtdecomments` DESC");

while($r1 = mysql_fetch_assoc($query1)){
     $query2 = mysql_query("SELECT * FROM `musicas` WHERE `id` = ".$r1['noticia_id']."");
     while($r2 = mysql_fetch_assoc($query2)){
          $resultado[]['titulo'] = $r2['nome'];
          $resultado[]['comentarios'] = $r1['qtdecomments'];

?>
                                <div id="mais-comentadas-estrutura">
                                
                        <a href="#pagina-musica"><h1><?php echo'$resultado["nome"]';?><h1></a><!--titulo da musica-->
                        <p><?php echo'$resultado[]["comentarios"]';?></p><!--valor dos comentários-->
                                
                                
                                </div><!--mais-comentadas-estrutura-->
                                

<?php }
}
?>
Músicas:
id    nome    imagem    encorporar    autor_id    data    download    categoria_id    track_autor    track_tamanho    track_versao
Comentários:
id    musica_id    autor_id    corpo    data    hora

Editado por SrMaster
Link para o comentário
Compartilhar em outros sites

  • 0

Antes eram notícias, agora são músicas... te decide aí...

As querys são case-sensitive, então tu tem que checar se tá tudo certinho os nomes do banco de dados, tabela, das colunas...

Arrumei

<?php          
$query1 = mysql_query("SELECT COUNT (*) AS `qtdecomments`, `musica_id` FROM `comentarios_musica` GROUP BY `musica_id` LIMIT 0,4 ORDER BY `qtdecomments` DESC");

while($r1 = mysql_fetch_assoc($query1)){
     $query2 = mysql_query("SELECT (*) FROM `musicas` WHERE `id` = ".$r1['musica_id']."");
     while($r2 = mysql_fetch_assoc($query2)){
          $resultado[]['titulo'] = $r2['nome'];
          $resultado[]['comentarios'] = $r1['qtdecomments'];
     }
}
?>
E para exibir as músicas, o ideal é antes armazenar todas na matriz e só depois exibi-las. Alí na segunda parte do código tu tá acessando o nome da música como se fosse um vetor simples, e com aspas duplas no índice. As aspas simples funcionam melhor, sempre. O mesmo vale para a quantidade de comentários. O acesso do titulo da música também esta errado, o nome do índice na variavel $resultados referente á música chama-se 'titulo', e não 'nome'. E quando tu der echo diretamente numa variável, acho que não tem que pôr as aspas. Uma maneira de acessar o conteúdo de $resultado...
<?php
foreach($resultado as $res){
         echo "<div id='mais-comentadas-estrutura'>";
     echo "<a href='#pagina-musica'><h1>".$res['titulo']."<h1></a><!--titulo da musica-->
                        <p>".$res['comentarios']."</p><!--valor dos comentários-->";
         echo "</div><!--mais-comentadas-estrutura-->";
}
?>

Talvez assim dê certo. Dá uma checada certinho nos nomes na query.

Editado por mJi
Link para o comentário
Compartilhar em outros sites

  • 0

Af, tá certo porque será que não vai? :s

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/senha123/public_html/freestepzone/index.php on line 683

Warning: Invalid argument supplied for foreach() in /home/senha123/public_html/freestepzone/index.php on line 694

Link para o comentário
Compartilhar em outros sites

  • 0
Af, tá certo porque será que não vai? :s

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/senha123/public_html/freestepzone/index.php on line 683

Warning: Invalid argument supplied for foreach() in /home/senha123/public_html/freestepzone/index.php on line 694

Tenta fazer a query1 no phpMyAdmin, pra ver se dá certinho.

Depois tenta a 2, trocando $r1['musica_id'] pelo ID de alguma música lá.

Link para o comentário
Compartilhar em outros sites

  • 0

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) AS `qtdecomments`, `musica_id` FROM `comentarios_musica` GROUP BY `musica_id`' at line 1

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) FROM `musicas` WHERE `id` = 1 LIMIT 0, 30' at line 1

Link para o comentário
Compartilhar em outros sites

  • 0
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) AS `qtdecomments`, `musica_id` FROM `comentarios_musica` GROUP BY `musica_id`' at line 1

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) FROM `musicas` WHERE `id` = 1 LIMIT 0, 30' at line 1

Acho que sei o que pode estar dando errado.

Na query 1, coloque o (*) junto com a palavra COUNT. Assim:

<?php          
$query1 = mysql_query("SELECT COUNT(*) AS `qtdecomments`, `musica_id` FROM `comentarios_musica` GROUP BY `musica_id` LIMIT 0,4 ORDER BY `qtdecomments` DESC");

while($r1 = mysql_fetch_assoc($query1)){
     $query2 = mysql_query("SELECT (*) FROM `musicas` WHERE `id` = ".$r1['musica_id']."");
     while($r2 = mysql_fetch_assoc($query2)){
          $resultado[]['titulo'] = $r2['nome'];
          $resultado[]['comentarios'] = $r1['qtdecomments'];
     }
}
?>

Link para o comentário
Compartilhar em outros sites

  • 0
mesma coisa :/

Tentou rodar esta consulta no phpMyAdmin?

SELECT COUNT(*) AS `qtdecomments`, `musica_id` FROM `comentarios_musica` GROUP BY `musica_id` LIMIT 0, 4 ORDER BY `qtdecomments` DESC

Se teu servidor SQL tem mais de um banco de dados, não se esqueça de entrar no banco de dados correto para fazer a query.

Editado por mJi
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...