Como filtrar dados repetidos de 2 tabelas? [RESOLVIDO]

1. Como filtrar dados repetidos de 2 tabelas? [RESOLVIDO]

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 09/10/2012 - 21:20h

Olá pessoal,
eu tenho um contador em meu site que armazena a data e hora da visita, IP, e a página que visitou.

Quero contar quantas visitas o site teve no total, mas não pode contar visitas do mesmo IP na mesma data.

a estrutura da tabela Contador é:
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| IP | varchar(15) | NO | | | |
| datetime | datetime | YES | | NULL | |
| local | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+

Se eu der um "select count(distinct(IP)) from contador" ele so contabiliza uma visita por IP sem importar a data.
Já revirei a internet em busca de uma solução e nada, estou aprendendo MySQL ainda não tenho muita prática.

Grato.



  


2. MELHOR RESPOSTA

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 10/10/2012 - 22:03h

Agora li melhor ;-)



SELECT COUNT(*) AS qtd_acessos FROM contador GROUP BY data, ip


3. Re: Como filtrar dados repetidos de 2 tabelas? [RESOLVIDO]

cr0n
_di0

(usa FreeBSD)

Enviado em 09/10/2012 - 21:49h

Acredito que você pode querer usar subquery e union all, algo como:


SELECT DISTINCT col FROM (SELECT ip FROM foo UNION ALL SELECT data FROM bar)


4. Re: Como filtrar dados repetidos de 2 tabelas? [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 09/10/2012 - 22:32h

É só usar o agrupar por: "GROUP BY"


SELECT ip, COUNT(*) AS qtd_acessos FROM contador GROUP BY IP 



5. Re: Como filtrar dados repetidos de 2 tabelas? [RESOLVIDO]

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 10/10/2012 - 20:37h

_di0 escreveu:

Acredito que você pode querer usar subquery e union all, algo como:


SELECT DISTINCT col FROM (SELECT ip FROM foo UNION ALL SELECT data FROM bar)


humm _di0 não entendi, tentei select distinct(IP) from contador (SELECT IP FROM foo UNION ALL SELECT data(datetime) FROM bar) da erro.

rai3mb escreveu:

É só usar o agrupar por: "GROUP BY"


SELECT ip, COUNT(*) AS qtd_acessos FROM contador GROUP BY IP 


rai3mb, mas preciso que ele me de a conta total da tabela, mas não contando IPs iguais na mesma data da coluna datetime, assim ele me retorna o total de visitas de cada IP somente


6. Re: Como filtrar dados repetidos de 2 tabelas? [RESOLVIDO]

cr0n
_di0

(usa FreeBSD)

Enviado em 11/10/2012 - 16:05h

Olá, o comando que eu passei foi um simples 'schema', há documentações sobre subquery, union all ,group by, para o seu caso especificamente. Pelo título, acreditava que estávamos falando de duas tabelas, quando na verdade são duas colunas. De todo modo, analise se o exemplo do membro vol acima lhe satifaz.


7. Re: Como filtrar dados repetidos de 2 tabelas? [RESOLVIDO]

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 15/10/2012 - 17:58h

rai3mb escreveu:

Agora li melhor ;-)



SELECT COUNT(*) AS qtd_acessos FROM contador GROUP BY data, ip


massa deu certo!!
select count(*) as qtd_acessos from contador group by date(datetime), ip order

tive que colocar o date(datetime) pra extrair somente a data da col datetime

Obrigado!


8. Re: Como filtrar dados repetidos de 2 tabelas? [RESOLVIDO]

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 15/10/2012 - 18:23h

ops surgiu outro problema.
no CGI não me retorna a soma total de "Rows" pra eu saber a soma de tudo..
o SQL retornou o resultado de cada IP, mas preciso dessa soma total

tentei fazer uma gambi em shell mas não deu certo:
SOMA="0"
mysql -u user banco -e "select count(*) from contador group by date(datetime), ip" | sed '1d' | while read NUM; do
SOMA="$(($NUM+NUM))"
echo $SOMA
done


mas sempre está retornando 2, o ideal seria o sql já retornar o total (Rows), tem como?


9. Re: Como filtrar dados repetidos de 2 tabelas? [RESOLVIDO]

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 15/10/2012 - 19:40h

o problema no shell ai consegui resolver, ei tinha que somar o TOTAL+1, aí da o resultado final certo

mas esta não é uma boa alternativa pois demora muito pra processar, enquanto no SQL vai demorar menos de 1 segundo ai demora uns 10 segundos!

preciso agora somente conseguir exibir o número de "Rows" quando o mysql é executado direto num CGI (com o parametro -e)


10. Re: Como filtrar dados repetidos de 2 tabelas? [RESOLVIDO]

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 16/10/2012 - 10:43h

Consegui

O parametro -vvv no cliente do MySQL faz exibir os detalhes
então depois um grep e um cut pra exibir somente o número de linhas =]






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts