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

(Resolvido) Consulta Mysql - ajuda


Necomendes

Pergunta

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

  • 0

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

  • 0

Ok.

Respondendo a pergunta

1º - 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

  • 0

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

  • 0

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

  • 0

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 por Necomendes
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...