MySQL utilizando melhor o servidor – Data e hora

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

John-Henriquesegunda-feira, 15/12/20087

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_noticias
WHERE 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_noticias
WHERE 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.

Termos relacionados:

  • a funcao date do php nao pega a hora do servidor e sim do sistema
  • retornar a hora do servidor mysql
  • salavr data e hora atual php mysql
  • função now mysql
  • mysql gravando hora errada
  • now php mysql
  • mysql settime
  • mysql salvar horario do servidor php
  • o que faz o date_sub no mysql
  • mysql media tempo

Este post foi útil? Retribua clicando no botão


7 comentários »

  1. Maicon terça-feira, 10/03/2009 em 19:13 - Reply

    Muito boas as dicas! Retornarei ao blog ;-)

  2. otavio nogueira quinta-feira, 02/04/2009 em 21:43 - Reply

    A unica coisa que tem q se cuidar é o tempo de resposta de uma query utilizando-se de funções proprias do mysql pode gerar milisegundos de latencia e dependendo do tamanho do projeto isto faz toda diferenca…

    Mas cada caso um caso e as dicas são bem valias :)

  3. Junior terça-feira, 25/08/2009 em 23:01 - Reply

    Excelentes dicas, mas e seu quiser exibir a data e as noticias que foram postadas nessa data por hora ( lembrando que o formato da data no mysql é datetime) tipo assim:

    25/08/09
    15:00 – titulo da nótícia 01
    14:25 – titulo da nótícia 01
    14:00 – titulo da nótícia 01
    13:15 – titulo da nótícia 01
    13:00 – titulo da nótícia 01

    24/08/09
    15:00 – titulo da nótícia 01
    14:25 – titulo da nótícia 01
    14:00 – titulo da nótícia 01
    13:15 – titulo da nótícia 01
    13:00 – titulo da nótícia 01

    • John-Henrique quarta-feira, 26/08/2009 em 10:35 - Reply

      @ JUNIOR
      Isso nem seria relacionado a manipulação de datas mas segue ai a instrução sql

      SELECT horario, titulo FROM tabela_noticias ORDER BY horario DESC

      Veja mais em http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html

      Falopa!

      • Junior quarta-feira, 26/08/2009 em 16:47 - Reply

        Obrigado pela ajuda, mas no bd devemos lembrar que a data está gravada com o formato datetime no mesmo campo da tabela (exemplo: 000-00-00 00:00:00) ou seja data e horário.

        • John-Henrique quarta-feira, 26/08/2009 em 17:26 - Reply

          @ JUNIOR
          E o que isso tem haver? Você testou a instrução que publiquei?

          Falopa!

  4. Deeck domingo, 03/01/2010 em 22:12 - Reply

    Olá, gostaria se vc pode me ajudar em uma dúvida!

    Estou começando agora na área de Web sites e programação, e estou precisando fazer uma página editável, (tipo a de um blog), então, não conheço muito em linguagens php, javascript e etc!
    Mas eu entendo de lógica de programação!
    então peguei um editor de página online em javascipt e depois juntei com o php, usando desse jeito

    $mensagem = $_POST ["edit1"];
    $msg = “$mensagem”;

    então salvei em um documento .txt

    $ponteiro = fopen (“pagina.txt”,”w”);
    fwrite ($ponteiro, “$msg\n\n”);
    fclose ($ponteiro);

    então coloquei o include em um frame desejado

    beleza da tudo certo, mas quando eu abro a página aparece o texto, mas a formatação não!
    isso porque o código fica gravado todo errado, ele adiciona uma \ contra barra antes de toda ” aspas.

    color=\”#ccffcc\”>

    acho que o erro não é na primeira página pois coloquei ao invés de action post uma função java

    action=”javascript:alert(‘FIELD 1:\n’ + document.f1.richEdit0.value

    então escrevo e recarrego a página então aparece no alerta o código certo sem as contra barras.

    Ufa! se vc achou que sou confuso, acredite, estou bem mais confuso que vc!
    Não faço a minima idéia do que devo fazer!

    desculpe-me por ter postado esse comentário em uma área não apropriada, gostaria de lhe enviar um e-mail, mas não achei o mesmo.

    por favor que estiver disposto a me ajudar, responda este comentário, posso te esplicar melhor ou até mesmo posso te enviar as páginas por e-mail.
    ou etc!

    Dês de já agradeço!
    desculpe-me por ser incoveniente!
    Deeck

Opine também » Coloque sua foto no comentário