MySQL - Como contar dados da tabela?  TOPIC_SOLVED

Topics Programming. Not necessarily about the BrazilFW!

MySQL - Como contar dados da tabela?  TOPIC_SOLVED

Mensagempor daniel.uramg » Qua Out 10, 2012 8:46 pm

Estou aprendendo MySQL e to num perrengue aqui

o contador do meu site armazena a data e hora da visita, IP, e a página que visitou numa tabela

Quero contar quantas visitas o site teve no total, mas não pode contar visitas do mesmo IP na mesma data.
por exemplo, quando alguém acessa o site, em cada página que ele vai armazena nessa tabela, mas o contador total só pode ler uma vez cada IP por dia

a estrutura da tabela Contador é:
Código: Selecionar todos
+----------+-------------+------+-----+---------+-------+
| 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.

será que tem como fazer isso direto no SQL e já me retornar só o valor, ou vou precisar fazer isso no programa?

valeu
Avatar do usuário
daniel.uramg
BFW Beneméritos
 
Mensagens: 1426
Registrado em: Qua Mai 20, 2009 4:42 pm
Localização: Taguatinga - DF
BrazilFW Box: Athlon XP 2400+ 1Gb RAM HD 20Gb
BFW 2.31.10+SP1, Squid, DNS Cache, EasyCaptive, MySAR, Apache, SCA, SqStat, EasyBackup. Bandwidth, Pure-FTP

Re: MySQL - Como contar dados da tabela?

Mensagempor brunovescovi » Qua Out 10, 2012 9:20 pm

Boa noite, pessoal.

Daniel, faz um select com distinct mostrando somente o IP e a data convertida em dd/mm/yy. Dessa forma você terá uma lista cheia de IPs e datas diferentes entre si.

Depois de conferir se a lista retornou o que você queria, aí é só adaptar um count e/ou group by (se quiser) e pronto. :o!

Um abraço.
Contribua para que o Projeto BFW permaneça no ar, Doe Click aqui
Contribua com o Bruno Vescovi, Doe Click aqui (pagseguro) ou Click aqui (paypal)
------------------------------------------------------------------------------------------------------------------------------
"Amor não é um sentimento. Amor é uma decisão de fazer o melhor possível para Deus e para o seu próximo."
Avatar do usuário
brunovescovi
BFW Moderator
BFW Add-on Developer
BFW Beneméritos
BFW Manager
BFW Documenter
BFW Expert
 
Mensagens: 3650
Registrado em: Ter Jun 29, 2010 7:27 pm
Localização: Guarapari - ES
BrazilFW Box: Não usando o BFW no momento

Re: MySQL - Como contar dados da tabela?

Mensagempor daniel.uramg » Qua Out 10, 2012 9:38 pm

brunovescovi escreveu:Boa noite, pessoal.

Daniel, faz um select com distinct mostrando somente o IP e a data convertida em dd/mm/yy. Dessa forma você terá uma lista cheia de IPs e datas diferentes entre si.

Depois de conferir se a lista retornou o que você queria, aí é só adaptar um count e/ou group by (se quiser) e pronto. :o!

Um abraço.

Olá Bruno blz cara

acho que eu tinha q dar 2 distinct na sequencia, pro IP e pra data, +- como:
select distinct(IP), distinct(date(datetime)) from contador
o date(datetime) aí é pra pegar somente a data da tabela datetime pela minha linha de raciocínio, mas assim não da certo >|

sql tem opção demais da conta, eu ainda estou mal engatinhando nisso, acredito que da pra fazer o que preciso direto no sql, depois de descobrir como vai parecer óbvio :lol:

Obrigado abraços
Avatar do usuário
daniel.uramg
BFW Beneméritos
 
Mensagens: 1426
Registrado em: Qua Mai 20, 2009 4:42 pm
Localização: Taguatinga - DF
BrazilFW Box: Athlon XP 2400+ 1Gb RAM HD 20Gb
BFW 2.31.10+SP1, Squid, DNS Cache, EasyCaptive, MySAR, Apache, SCA, SqStat, EasyBackup. Bandwidth, Pure-FTP

Re: MySQL - Como contar dados da tabela?

Mensagempor brunovescovi » Qua Out 10, 2012 10:30 pm

Boa noite, pessoal.

O DISTINCT você usa antes das colunas:
Código: Selecionar todos
SELECT DISTINCT campo1,campo2,campo3 FROM TABELA

A função de converter datetime em date eu esqueci, mas procura no Google que é fácil. :o!

Um abraço.
Contribua para que o Projeto BFW permaneça no ar, Doe Click aqui
Contribua com o Bruno Vescovi, Doe Click aqui (pagseguro) ou Click aqui (paypal)
------------------------------------------------------------------------------------------------------------------------------
"Amor não é um sentimento. Amor é uma decisão de fazer o melhor possível para Deus e para o seu próximo."
Avatar do usuário
brunovescovi
BFW Moderator
BFW Add-on Developer
BFW Beneméritos
BFW Manager
BFW Documenter
BFW Expert
 
Mensagens: 3650
Registrado em: Ter Jun 29, 2010 7:27 pm
Localização: Guarapari - ES
BrazilFW Box: Não usando o BFW no momento

Re: MySQL - Como contar dados da tabela?

Mensagempor daniel.uramg » Seg Out 15, 2012 6:04 pm

Consegui

tinha aberto um tópico também no Viva O Linux e um brother lá tirou de letra
Código: Selecionar todos
SELECT count(*) FROM contador ORDER BY date(datetime), ip


só que daí me retorna a tabela com a quantidade de visitas de cada IP, mas agora já está + fácil só fazer o SH somar todas as colunas :o!

Obrigado pela ajuda Bruno!
vou deixar o tópico aberto mais uns dias caso surja alguma outra questão, ou alguém queira fazer alguma observação
Avatar do usuário
daniel.uramg
BFW Beneméritos
 
Mensagens: 1426
Registrado em: Qua Mai 20, 2009 4:42 pm
Localização: Taguatinga - DF
BrazilFW Box: Athlon XP 2400+ 1Gb RAM HD 20Gb
BFW 2.31.10+SP1, Squid, DNS Cache, EasyCaptive, MySAR, Apache, SCA, SqStat, EasyBackup. Bandwidth, Pure-FTP

Re: MySQL - Como contar dados da tabela?

Mensagempor TicoDePano » Ter Out 16, 2012 8:57 am

Bom dia, Daniel.

Código: Selecionar todos
select count(*) total
from (
  select ip, trunc(datetime)
  from contador
  group by ip, trunc(datetime)
)


Comando criado no Oracle.
Verifique a sintaxe no MySQL.
Avatar do usuário
TicoDePano
BFW Curious
 
Mensagens: 30
Registrado em: Dom Jan 22, 2012 6:43 pm
BrazilFW Box:

Re: MySQL - Como contar dados da tabela?

Mensagempor daniel.uramg » Ter Out 16, 2012 10:40 am

TicoDePano escreveu:Bom dia, Daniel.

Código: Selecionar todos
select count(*) total
from (
  select ip, trunc(datetime)
  from contador
  group by ip, trunc(datetime)
)


Comando criado no Oracle.
Verifique a sintaxe no MySQL.

Olá TicoDePano,
acho que o trunc() não existe no mysql..
esse comando acima é pra mostrar o número total de linhas?

consegui fazer aqui no cliente mysql no shell mesmo:
Código: Selecionar todos
mysql -vvv -u user banco -e "select count(*) from contador group by date(datetime), ip" | grep "row" | cut -f 1 -d' '

o parametro -vvv faz exibir os detalhes, daí o grep e o cut exibe só o número de linhas que me interessa

por enquanto este está servindo :D

Obrigado abraços.
Avatar do usuário
daniel.uramg
BFW Beneméritos
 
Mensagens: 1426
Registrado em: Qua Mai 20, 2009 4:42 pm
Localização: Taguatinga - DF
BrazilFW Box: Athlon XP 2400+ 1Gb RAM HD 20Gb
BFW 2.31.10+SP1, Squid, DNS Cache, EasyCaptive, MySAR, Apache, SCA, SqStat, EasyBackup. Bandwidth, Pure-FTP

Re: MySQL - Como contar dados da tabela?

Mensagempor TicoDePano » Qua Out 17, 2012 7:59 am

daniel.uramg escreveu:
TicoDePano escreveu:Bom dia, Daniel.

Código: Selecionar todos
select count(*) total
from (
  select ip, trunc(datetime)
  from contador
  group by ip, trunc(datetime)
)


Comando criado no Oracle.
Verifique a sintaxe no MySQL.

Olá TicoDePano,
acho que o trunc() não existe no mysql..
esse comando acima é pra mostrar o número total de linhas?

consegui fazer aqui no cliente mysql no shell mesmo:
Código: Selecionar todos
mysql -vvv -u user banco -e "select count(*) from contador group by date(datetime), ip" | grep "row" | cut -f 1 -d' '

o parametro -vvv faz exibir os detalhes, daí o grep e o cut exibe só o número de linhas que me interessa

por enquanto este está servindo :D

Obrigado abraços.


Bom dia, Daniel.

Exato, o comando é para mostrar apenas o número de linhas.

No Oracle, um datetime é composto por um valor de ponto flutuante, onde a parte inteira significa o dia e a parte decimal a hora dentro daquele dia.

O trunc serve apenas para desconsiderar a parte decimal, levando em consideração apenas o dia. No MySQL, pelo que vi dos seus outros posts, você tem o mesmo retorno com
Código: Selecionar todos
date(datetime)
.

Troque o trunc() no comando por date() que deve funcionar no MySQL.

Abraço.
Avatar do usuário
TicoDePano
BFW Curious
 
Mensagens: 30
Registrado em: Dom Jan 22, 2012 6:43 pm
BrazilFW Box:

Re: MySQL - Como contar dados da tabela?

Mensagempor daniel.uramg » Ter Out 23, 2012 5:00 pm

TicoDePano escreveu:
Código: Selecionar todos
select count(*) total
from (
  select ip, trunc(datetime)
  from contador
  group by ip, trunc(datetime)
)

Bom dia, Daniel.

Exato, o comando é para mostrar apenas o número de linhas.

No Oracle, um datetime é composto por um valor de ponto flutuante, onde a parte inteira significa o dia e a parte decimal a hora dentro daquele dia.

O trunc serve apenas para desconsiderar a parte decimal, levando em consideração apenas o dia. No MySQL, pelo que vi dos seus outros posts, você tem o mesmo retorno com
Código: Selecionar todos
date(datetime)
.

Troque o trunc() no comando por date() que deve funcionar no MySQL.

Abraço.

Olá TicoDePano,
também não dá, a sintaxe do comando no mysql é diferente, mesmo trocando o trunc por date da erro pois o restante dos parametros não batem na ordem e tal, eu axo..

bom de toda forma do modo que fiz já resolveu o problema, não foi a melhor alternativa mas o resultado ta sendo o mesmo :mrgreen:

valew abçs
Avatar do usuário
daniel.uramg
BFW Beneméritos
 
Mensagens: 1426
Registrado em: Qua Mai 20, 2009 4:42 pm
Localização: Taguatinga - DF
BrazilFW Box: Athlon XP 2400+ 1Gb RAM HD 20Gb
BFW 2.31.10+SP1, Squid, DNS Cache, EasyCaptive, MySAR, Apache, SCA, SqStat, EasyBackup. Bandwidth, Pure-FTP


Voltar para Programming

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron