Ir para conteúdo

POWERED BY:

Arquivado

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

pedro_kampos

Conta Clicks - Exibir linhas repetidas uma só vez e somar

Recommended Posts

Boa noite pessoal! estou com uma dúvida quando à exibicão de um tabela, que tem a funcão de armazenar os produtos, de minha loja virtual, visualizados.

 

A minha Tabela possui essas colunas seguintes:

 

- id (auto increment)

-produto

-ip

-data

-clicks

 

O que eu quero é listar como na seguinte comparacão:

 

título: total de clicks por produto.(ordem de maior pra o menor)

 

|produto|clicks|

 

|Sapato||330|

|Saia||203|

|Escova||169|

 

Contudo, porém, todavia... há problemas pois na tabela há muitas linhas repetidas tanto de PRODUTOS como de IP e de DATA. E teria também que somar o numero de CLICKS dos repetidos.

 

Alguém tem alguma diretriz , ideia que solucione meu problema? :/

 

Agradeço desde já!

 

 

 

 

"LUTEM E CONTINUEM LUTANDO! ATÉ CORDEIROS VIRAREM LEÕES..."

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, eles viram.

 

vamos ver, voce quer a soma dos produtos que o ip + a data sejam diferentes, utilize o distinct(http://dev.mysql.com/doc/refman/5.0/en/distinct-optimization.html) junto com o concat(http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat) e agrupe tudo com o group by(http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html) pelo produto com o sum(http://www.w3schools.com/sql/sql_func_sum.asp)

 

ex.: SELECT DISTINCT(CONCAT(ip,data)) , SUM(clicks) AS cliques , FROM cliquesprodutos GROUP BY produto

 

n testei, mas talve não seja bem isso, qualquer coisa coloca abaixo o que aconteceu

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, eles viram.

 

vamos ver, voce quer a soma dos produtos que o ip + a data sejam diferentes, utilize o distinct(http://dev.mysql.com/doc/refman/5.0/en/distinct-optimization.html) junto com o concat(http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat) e agrupe tudo com o group by(http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html) pelo produto com o sum(http://www.w3schools.com/sql/sql_func_sum.asp)

 

ex.: SELECT DISTINCT(CONCAT(ip,data)) , SUM(clicks) AS cliques , FROM cliquesprodutos GROUP BY produto

 

n testei, mas talve não seja bem isso, qualquer coisa coloca abaixo o que aconteceu

 

Opa amigão eu consegui, fiquei mexendo aqui e funcionou assim:

 

SELECT produto,SUM(clicks) AS total FROM tabela1 GROUP BY produto ORDER BY total DESC

 

e ficou perfeito. Mérito à você.

 

Mas na verdade eu tenho 2 tabelas que contam cliques, uma pra visitantes e outra pra clientes. a diferenca das duas é que a de clientes tem a mais a coluna 'id_cliente'.

 

aí o que eu tentei fazer:

 

chamar as duas tabelas numa query, listar de maneira que evite repeticoes e nas mesmas repeticoes somar os cliques.

 

aí quase consegui assim:

 

SELECT v.*, c.*, SUM(v.clicks + c.clicks) AS total FROM tabela1 v, tabela2 c WHERE v.produto = c.produto GROUP BY v.produto,c.produto ORDER BY total DESC

 

só que ele não soma corretamente e não adiciona uma linha diferente, por exemplo: se tiver banana na tabela1 e não tiver na tabela2 ele não lista.

 

Tens alguma ideia de como faz? Abracão mestre!

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Amigo...implementei o código, com algumas funcoes que vc mostrou, e agora ele mostra todos os produtos sem ser preciso existir nas duas tabelas. porém ele não soma corretamente. Acho que esse código tem tudo pra dar certo! só devo estar faltando alguma nova orientação pra as funcoes matematicas. tens ideia se tou no caminho certo? abraço :D

 

SELECT v.produto, v.clicks, c.clicks, c.produto, SUM(v.clicks + c.clicks) AS total
FROM tabela1 v
LEFT JOIN tabela2 c
ON v.produto = c.produto
GROUP BY v.produto, c.produto
UNION
SELECT v.produto, v.clicks, c.clicks, c.produto, SUM(v.clicks + c.clicks) AS total
FROM tabela1 v
RIGHT JOIN tabela2 c
ON v.produto = c.produto
GROUP BY v.produto, c.produto

 

 

só que as somas tão vindo bem loucas!!

 

Vou ilustrar melhor meu objetivo! pra ficar mais claro!

 

.............TABELA1 //conta quantas vezes o produto foi visualizado por VISITANTES

 

que havia conseguido com essa funcao = SELECT produto,SUM(clicks) AS total FROM tabela1 GROUP BY produto ORDER BY total DESC

  1. +----------+----------+
  2. | produto | clicks|
  3. +-----------+----------+
  4. | uva | 10 |
  5. | pera | 20 |
  6. | laranja | 15 |
  7. +-----------+-----------+

 

.............TABELA2 //conta quantas vezes o produto foi visualizado por CLIENTES LOGADOS

 

mesma funcao que a anterior

  1. +---------+-----------+
  2. | produto | clicks|
  3. +---------+----------+
  4. | uva | 50 |
  5. | laranja | 25 |
  6. | tomate | 13 |
  7. +---------+----------+

 

 

Daí quero criar um relatório assim:

  1. +----------------------------------+
  2. | Produtos Mais Visitados:|
  3. +----------------------------------+
  4. +---------+----------+
  5. | produto | clicks|
  6. +---------+----------+
  7. | uva | 60 |
  8. | laranja | 40 |
  9. | pera | 20 |
  10. | tomate | 13 |
  11. +----------+----------+

 

Agradeço a colaboração dos amigos!! ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grandes mestres, muito obrigado! conseguimos resolver! Pesquisei bastante, e conseguimos desenvolver o que queriamos.

primeiramente consegui fazer através de TABLE VIEWS, só que isso me limitava, pois não iria poder administrar o tempo em meus relatórios. daí criei o código independente:

 

SOLUCAO-------------------------------------------------------------------

Código:
SELECT v.id_produto, v.total, c.total, c.id_produto, SUM(ifnull(v.total,0)+ifnull(c.total,0)) AS totalidadeFROM vLEFT JOIN c ON v.id_produto = c.id_produtoGROUP BY v.id_produto, c.id_produtoUNIONSELECT v.id_produto, v.total, c.total, c.id_produto, SUM(ifnull(v.total,0)+ifnull(c.total,0)) AS totalidadeFROM vRIGHT JOIN c ON v.id_produto = c.id_produtoGROUP BY v.id_produto, c.id_produtoorder by totalidade desc

obs: C e V são table view. criadas ambas com instrucão:

Código:
SELECT id_produto,SUM(clicks) AS total FROM conta_click_produtos GROUP BY id_produto ORDER BY total DESC

E

Código:
SELECT id_produto,SUM(clicks) AS total FROM conta_click_produtos_visitantes GROUP BY id_produto ORDER BY total DESC

----------agora, o código independente=

Código:
SELECT v.id_produto, v.total, c.total, c.id_produto, SUM(ifnull(v.total,0)+ifnull(c.total,0)) AS totalidadeFROM (SELECT id_produto,SUM(clicks) AS total FROM conta_click_produtos_visitantes GROUP BY id_produto ORDER BY total DESC) AS vLEFT JOIN (SELECT id_produto,SUM(clicks) AS total FROM conta_click_produtos GROUP BY id_produto ORDER BY total DESC) AS c ON v.id_produto = c.id_produtoGROUP BY v.id_produto, c.id_produtoUNIONSELECT v.id_produto, v.total, c.total, c.id_produto, SUM(ifnull(v.total,0)+ifnull(c.total,0)) AS totalidadeFROM (SELECT id_produto,SUM(clicks) AS total FROM conta_click_produtos_visitantes GROUP BY id_produto ORDER BY total DESC) AS vLEFT JOIN (SELECT id_produto,SUM(clicks) AS total FROM conta_click_produtos GROUP BY id_produto ORDER BY total DESC) AS c ON v.id_produto = c.id_produtoGROUP BY v.id_produto, c.id_produtoorder by totalidade desc

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.