Necomendes Postado Julho 10, 2014 Denunciar Share Postado Julho 10, 2014 Pessoal, tudo bem com vocês?! Minha dúvida é a seguinte, imagine esta condição: tb_usuario (id_user - nome) 1 - A 2 - B 3 - C ... tb_artigo (id_artigo - id_user - descricao) 1 - 1 - artigo1 2 - 1 - artigo2 3 - 2 - artigo1 4 - 3 - artigo1 ... explicação (usuario 1 possui dois artigos publicados / usuarios 2 e 3 possuem 1 artigo cada) tb_comentario (id_coment - id_artigo - id_user - comentario) 1 - 1 - 2 - coment1 2 - 1 - 2 - coment2 3 - 2 - 2 - coment3 4 - 3 - 1 - coment1 ... explicação (o usuario 2 comentou duas vezes o artigo 1 e uma vez o artigo 2, o usuario 3 comentou 1 vez o artigo 1) tb_pontos_user (id_user - pontos) 1 - 100 2 - 150 3 - 70 ... explicação (os usuarios cadastrados possuem os respectivos pontos) Este é apenas um exemplo, as tabelas reais tem centenas de registros. Agora entra a dúvida da query. 1º - Quero retornar os artigos que possuem mais comentários, da maior qtd de comentários para o menor número de comentários. 2º - Quero retornar os artigos que possuem os usuários com maior pontos. Pessoal, muito obrigado pela ajuda! Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Julho 10, 2014 Denunciar Share Postado Julho 10, 2014 Isto não é ajuda. é fazer o dever de casa pra você, não? Mostre o que você já fez e prosseguiremos daí. Link para o comentário Compartilhar em outros sites More sharing options...
0 Necomendes Postado Julho 11, 2014 Autor Denunciar Share Postado Julho 11, 2014 Denis, bom dia! Cara sei o básico de SQL. Sei que preciso agrupar as tabelas enfim, mas não sei como unir as mesmas de maneira que eu consiga o resultado esperado. O que eu já fiz é exatamente isso ai que coloquei, tenho estas tabelas, já fiz algumas consultas que me atendem, mas cheguei neste ponto onde não consegui evoluir. Sei que esta condição que coloquei pra quem entende é básico e fácil de fazer, mas sou designer gráfico e raramente preciso fazer algo mais aprimorado no SQL. E este exemplo irá me ajudar na composição de outras consultas que irão aparecer. Se puder ajudar, desde já agradeço! Abraço. Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Julho 11, 2014 Denunciar Share Postado Julho 11, 2014 Ok. Respondendo a pergunta1º - Quero retornar os artigos que possuem mais comentários, da maior qtd de comentários para o menor número de comentários. Quantidade de comentários por artigo SELECT id_artigo, COUNT(comentario) AS qtdcomentarios FROM tb_comentario GROUP BY id_artigo ORDER BY qtdcomentarios DESC Sabendo o descritivo do artigo SELECT a.descricao, c.qtdcomentarios FROM tb_artigo a INNER JOIN (SELECT c1.id_artigo, COUNT(c1.comentario) AS qtdcomentarios FROM tb_comentario c1 GROUP BY id_artigo) c ON c.id_artigo = a.id_artigo ORDER BY c.qtdcomentarios DESC Com base no que postei acima, tente responder a segunda pergunta. Link para o comentário Compartilhar em outros sites More sharing options...
0 Necomendes Postado Julho 11, 2014 Autor Denunciar Share Postado Julho 11, 2014 Denis, muito obrigado cara foi de grande ajuda! Vou tentar agora responder a questão 2 com a sua ajuda, valeu mesmo! Abraço! Link para o comentário Compartilhar em outros sites More sharing options...
0 Necomendes Postado Julho 11, 2014 Autor Denunciar Share Postado Julho 11, 2014 Denis, tentei aqui, e creio que cheguei perto, mas ainda sim, não consegui, dá um erro, veja o que estou fazendo: SELECT artigo_id, artigo_nome FROM tb_artigo INNER JOIN (SELECT c1.pessoa_id AS id, c1.relatorio_votos_recebidos AS votos FROM tb_relatorio_pessoa c1 ORDER BY c1.relatorio_votos_recebidos DESC) tb_relatorio ON tb_relatorio.pessoa_id = tb_artigo.pessoa_id Dá o seguinte erro 10:21:52 Unknown column 'tb_relatorio.pessoa_id' in 'on clause' 0.219 sec Lembrando que estou tentando: Retornar os artigos que possuem os usuários com maior pontos. Obrigado pela ajuda! Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Julho 11, 2014 Denunciar Share Postado Julho 11, 2014 Seu erro começa aqui: SELECT c1.pessoa_id AS id Quando você usa o AS você está renomeando o campo da base de dados. Então, nesta linha ON tb_relatorio.pessoa_id = tb_artigo.pessoa_id Deveria ser assim: ON tb_relatorio.id = tb_artigo.pessoa_id Link para o comentário Compartilhar em outros sites More sharing options...
0 Necomendes Postado Julho 11, 2014 Autor Denunciar Share Postado Julho 11, 2014 (editado) E o erro não é só este, pois a questão da ordenação não funcionou, ou seja, preciso retornar os artigos pertencentes as pessoas com maior número de votos (do maior para o menor). E esta consulta não retornou a ordenação correta, onde estaria o problema? Obrigado! Editado Julho 11, 2014 por Necomendes Link para o comentário Compartilhar em outros sites More sharing options...
0 Necomendes Postado Julho 11, 2014 Autor Denunciar Share Postado Julho 11, 2014 Estranho que quando utilizo uma outra tabela com a mesma regra, só que usando campos diferentes a ordenação funciona. Muito estranho. Vou quebrar a cabeça aqui. Link para o comentário Compartilhar em outros sites More sharing options...
0 Necomendes Postado Julho 11, 2014 Autor Denunciar Share Postado Julho 11, 2014 Denis, muito obrigado pela força cara, eu encontrei o problema e agora está tudo certo : ) Valeu mesmo!! Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Necomendes
Pessoal, tudo bem com vocês?!
Minha dúvida é a seguinte, imagine esta condição:
tb_usuario (id_user - nome)
1 - A
2 - B
3 - C
...
tb_artigo (id_artigo - id_user - descricao)
1 - 1 - artigo1
2 - 1 - artigo2
3 - 2 - artigo1
4 - 3 - artigo1
...
explicação (usuario 1 possui dois artigos publicados / usuarios 2 e 3 possuem 1 artigo cada)
tb_comentario (id_coment - id_artigo - id_user - comentario)
1 - 1 - 2 - coment1
2 - 1 - 2 - coment2
3 - 2 - 2 - coment3
4 - 3 - 1 - coment1
...
explicação (o usuario 2 comentou duas vezes o artigo 1 e uma vez o artigo 2, o usuario 3 comentou 1 vez o artigo 1)
tb_pontos_user (id_user - pontos)
1 - 100
2 - 150
3 - 70
...
explicação (os usuarios cadastrados possuem os respectivos pontos)
Este é apenas um exemplo, as tabelas reais tem centenas de registros.
Agora entra a dúvida da query.
1º - Quero retornar os artigos que possuem mais comentários, da maior qtd de comentários para o menor número de comentários.
2º - Quero retornar os artigos que possuem os usuários com maior pontos.
Pessoal, muito obrigado pela ajuda!
Link para o comentário
Compartilhar em outros sites
9 respostass a esta questão
Posts Recomendados