Ir ao conteúdo
  • Cadastre-se
pedrokampos

Erro na listagem

Recommended Posts

Opa pessoal, tenho uma tabela que armazena as visualizações de cada produto de minha loja por dia.

Daí eu estou fazendo um relatório para exibir na minha area administrativa e consequentemente resolvi criar um filtro por tempo(semestre, mês, semana, hoje).

Minha tabela possui as seguintes colunas: id / id_produto / ip / data / clicks

utilizo o seguinte código para AGRUPAR os "id_produto" repetidos e SOMAR a coluna clicks.

SELECT id_produto,SUM(clicks) AS totalidade 
FROM conta_click_produtos_visitantes GROUP BY id_produto ORDER BY totalidade DESC

e agora quero que, por exemplo ele exiba apenas os produtos visualizados HOJE, no caso utilizei a funcão TO_DAYS():

SELECT id_produto,SUM(clicks) AS totalidade , (TO_DAYS( CURDATE( ) ) - TO_DAYS( data )) AS tempo 
FROM conta_click_produtos_visitantes GROUP BY id_produto HAVING tempo <= 0 ORDER BY totalidade DESC

Só que não está funcionando como eu quero, ele não está obedecendo corretamente a condicão HAVING e não está isolando a coluna "tempo" corretamente.

eu quero que ele isole somente os que tem a coluna tempo = valor que eu desejar e que depois agrupe os repetidos e some a coluna clicks.

Alguem dá uma luz?

Agradeço desde já :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

Tente inverter a ordem da clasula having e group by deste jeito:


SELECT id_produto,SUM(clicks) AS totalidade , (TO_DAYS( CURDATE( ) ) - TO_DAYS( data )) AS tempo
FROM conta_click_produtos_visitantes HAVING tempo <= 0 GROUP BY id_produto ORDER BY totalidade DESC

Creio que tem outras formas melhores de fazer isso..

Lembro que existe uma clausula para datas.. por exemplo: mostrar todos os dados entre data 1 e data 2 esta clausula se chama between

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Olá,

Tente inverter a ordem da clasula having e group by deste jeito:


SELECT id_produto,SUM(clicks) AS totalidade , (TO_DAYS( CURDATE( ) ) - TO_DAYS( data )) AS tempo
FROM conta_click_produtos_visitantes HAVING tempo <= 0 GROUP BY id_produto ORDER BY totalidade DESC

Creio que tem outras formas melhores de fazer isso..

Lembro que existe uma clausula para datas.. por exemplo: mostrar todos os dados entre data 1 e data 2 esta clausula se chama between

aí ele mostra esse erro:

#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 'GROUP BY id_produto ORDER BY totalidade DESC LIMIT 0, 30' at line 2

:/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Having deve vir após o Group By........ igual o ORDER by, sempre após o GROUP BY.

Se quer filtrar o que foi visto hoje, por que não testa no WHERE, sem inventar muito? ^^

SELECT id_produto
,SUM(clicks) AS totalidade
FROM conta_click_produtos_visitantes
WHERE DATA = CURDATE()
GROUP BY id_produto
ORDER BY totalidade DESC;

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×