Ir ao conteúdo
  • Cadastre-se

Erro na listagem


pedrokampos

Posts recomendados

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

Link para o comentário
Compartilhar em outros sites

  • Moderador

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

Link para o comentário
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

:/

Link para o comentário
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;

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...