Jump to content
Fórum Script Brasil
  • 0

Sistema de top?


SrMaster

Question

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 to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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

Edited by SrMaster
Link to comment
Share on other 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.

Edited by mJi
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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.

Edited by mJi
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...