em

MySQL utilizando melhor o servidor – Data e hora

mysql

Economize tempo durante a programação utilizando melhor o servidor MySQL (ou qualquer outro que você utilize), você pode conseguir isto conhecendo melhor as funcionalidades do MySQL, tentarei abordar situações reais do cotidiano de um programador.

Funções

Provavelmente você conheça diversas funções em PHP que permitam manipular data e hora e por este motivo você acostumou-se a trabalhar manipulação de data e hora diretamente no PHP, mas, você pode fazer toda a manipulação no banco de dados.

Imagine que um usuário adicionou uma nova notícia no sistema (qualquer sistema é só um exemplo), provavelmente a função ou script para realizar a gravação deste registro seja algo parecida com esta.

if( mysql_query( "INSERT INTO tabela_noticias ( `id`, `titulo`, `horario` ) VALUES ( NULL, '". $_POST['titulo'] ."', '". date( "Y-m-d H:i:s" ) ."' )" ) ){echo "Registro adicionado com sucesso";}else{echo "Não foi possível adicionar o registro";}

A parte que nos interessa é a instrução SQL, mais precisamente a data e hora em que foi adicionada a noticia. Note que foi utilizada a função date do PHP, mas, poderíamos simplificar as coisas e deixar o script um pouco mais ágil trocando a instrução SQL anterior por esta.

INSERT INTO tabela_noticias VALUES( NULL, '". $_POST['titulo'] ."', NOW() )

Observe que troquei a função date por NOW(), uma função do MySQL (funciona em diversos SGBDs). Esta função retorna a data e hora atual no servidor MySQL e programando desta forma você diminui o tempo de processamento do PHP, claro, é imperceptível a diferença mas, dependendo da complexidade do sistema você notará uma grande diferença no tempo de processamento.

Conhecendo mais

Em alguns casos você precisa retornar em uma consulta apenas registros de determinado mês, como por exemplo somente os registros deste mês, uma consulta assim pode ser feita da seguinte forma.

SELECT *FROM tabela_noticias WHERE MONTH( `horario` ) = MONTH( NOW() )

Note que é uma consulta bem simples e que você não precisa informar nada além das funções MONTH e NOW, você já conheceu a função NOW, então nos resta a função MONTH, ela é responsável por retornar o mês de uma data. Os valores retornados serão 1 à 12 representando Janeiro à Dezembro.

Talvez você já esteja se perguntando “Mas e se eu precisar retornar os registros de 1 ou 2 meses atrás?”, bom, neste caso poderemos fazer um cálculo simples, direto no MySQL (sim, dá pra fazer cálculos matemáticos no MySQL).

Neste caso podemos resolver de forma simples, dois meses tem em média 60 dias, sendo assim, podemos utilizar a função DATE_ADD() fazer a seguinte consulta para retornar registro de dois meses atrás.

SELECT *FROM tabela_noticiasWHERE MONTH( `horario` ) = MONTH( ADDDATE( NOW(), -60 DAY ) )

A mesma consulta mas, utilizando DATE_SUB, que é mais indicada para este caso até mesmo por uma questão de organização já que o nome da função já explica o que está fazendo nesta instrução.

SELECT *FROM tabela_noticiasWHERE MONTH( `horario` ) = MONTH( DATE_SUB( NOW(), -60 DAY ) )

Você também poderia querer retornar os registros de um ano específico ou do ano passado. E para isso poderia utilizar a função YEAR.

Para retornar registros de um ano especifico, neste caso o ano de 2007

SELECT *FROM tabela_noticias WHERE YEAR( `horario` ) = 2007

Para retornar registros de um ano anterior, neste caso o ano passado

SELECT *FROM tabela_noticias WHERE YEAR( `horario` ) = YEAR( DATE_SUB( NOW(), -365 DAY ) )

Conclusão

Trabalhar com datas no MySQL acaba sendo mais simples que trabalhar no PHP, facilita bastante a organização dos dados e o melhor de tudo é que diminui a quantidade de linhas de código na programação PHP já que toda a manipulação das datas ficam por conta do MySQL.

fonte

Gostou dessa matéria?

Inscreva seu email para receber atualizações com as últimas publicações do nosso blog.

Deixe o seu comentário: