Página 1 de 1

MySQL - Como contar dados da tabela?  TOPIC_SOLVED

MensagemEnviado: Qua Out 10, 2012 8:46 pm
por daniel.uramg
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

Re: MySQL - Como contar dados da tabela?

MensagemEnviado: Qua Out 10, 2012 9:20 pm
por brunovescovi
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.

Re: MySQL - Como contar dados da tabela?

MensagemEnviado: Qua Out 10, 2012 9:38 pm
por daniel.uramg
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

Re: MySQL - Como contar dados da tabela?

MensagemEnviado: Qua Out 10, 2012 10:30 pm
por brunovescovi
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.

Re: MySQL - Como contar dados da tabela?

MensagemEnviado: Seg Out 15, 2012 6:04 pm
por daniel.uramg
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

Re: MySQL - Como contar dados da tabela?

MensagemEnviado: Ter Out 16, 2012 8:57 am
por TicoDePano
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.

Re: MySQL - Como contar dados da tabela?

MensagemEnviado: Ter Out 16, 2012 10:40 am
por daniel.uramg
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.

Re: MySQL - Como contar dados da tabela?

MensagemEnviado: Qua Out 17, 2012 7:59 am
por TicoDePano
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.

Re: MySQL - Como contar dados da tabela?

MensagemEnviado: Ter Out 23, 2012 5:00 pm
por daniel.uramg
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