Obter os últimos registros de uma tabela MySQL através de um intervalo de tempo em PHP



Neste tutorial vamos mostrar como podemos obter os últimos registros a partir de um intervalo de datas em uma tabela MySQL, utilizando PHP. Vamos nos nossos exemplos usar três funções de datas do MySQL, sendo elas:  DATA_ADD (Adiciona um intervalo de tempo a uma data), DATA_SUB (Subtrai um intervalo de tempo a uma data) e CURDATE (Retorna a data corrente atual).

MySQL é um sistema de gerenciamento de banco de dados, que utiliza a linguagem SQL como interface. É atualmente um dos sistemas de gerenciamento de bancos de dados mais populares, com mais de 10 milhões de instalações pelo mundo. Wikipédia

Antes de mostrarmos como obter os últimos registros de uma tabela MySQL, vamos falar um pouquinho das funções de data que iremos utilizar nos nossos exemplos:

Função MySQL:  DATA_ADD

Como já dissemos, esta função adiciona um intervalo de tempo a uma data. Veja a sintaxe abaixo:

DATE_ADD(data, INTERVAL valor unidade)

onde:

data => Data a ser modificada.

valor => O valor do intervalo de tempo a adicionar. Valores positivos e negativos são permitidos.

unidade => Unidade de tempo a adicionar. As unidades de tempo podem ser:

  • MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR, SECOND_MICROSECOND, MINUTE_MICROSECOND, MINUTE_SECOND, HOUR_MICROSECOND, HOUR_SECOND, HOUR_MINUTE, DAY_MICROSECOND, DAY_SECOND, DAY_MINUTE, DAY_HOUR, YEAR_MONTH

Exemplo:

SELECT DATE_ADD("2019-07-15", INTERVAL -2 MONTH);

Resultado: 2019-05-15

Função MySQL: DATA_SUB

Como já dissemos, esta função subtrai um intervalo de tempo a uma data. Veja a sintaxe abaixo:

DATE_SUB(data, INTERVAL valor unidade)

onde:

data => Data a ser modificada.

valor => O valor do intervalo de tempo a subtrair. Valores positivos e negativos são permitidos.

  • MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR, SECOND_MICROSECOND, MINUTE_MICROSECOND, MINUTE_SECOND, HOUR_MICROSECOND, HOUR_SECOND, HOUR_MINUTE, DAY_MICROSECOND, DAY_SECOND, DAY_MINUTE, DAY_HOUR, YEAR_MONTH

Exemplo:

SELECT DATE_SUB("2019-07-15", INTERVAL 2 MONTH);

Resultado: 2019-05-15

Função MySQL : DATACUR

Como já dissemos, esta função retorna a data atual.

Observações:

1. A data é retornada como: "YYYY-MM-DD" (string) ou como YYYYMMDD (numérico).

2. Esta função é similar a função CURRENT_DATE().

Veja a sintaxe abaixo:

CURDATE()

Exemplo 1: Subtrair 2 dias da data atual (usando DATE_ADD)

SELECT DATE_ADD(CURDATE(), INTERVAL -2 DAY); 

Resultado: 2019-07-10 (exemplo registrado em 12/07/2019)

Exemplo 2: Subtrair 2 dias da data atual (usando DATE_SUB)

SELECT DATE_SUB(CURDATE(), INTERVAL 2 DAY); 

Resultado: 2019-07-10 (exemplo registrado em 12/07/2019)

Obter os últimos registros através de um intervalo de tempo

Considerando uma tabela de um banco de dados MySQL, podemos obter os últimos registros a partir de um intervalo de tempo. Como exemplo, vamos utilizar a tabela MySQL abaixo onde podemos visualizar os últimos registros (lembrando que este tutorial foi elaborado em 12/07/2019):

Considerando a tabela MySQL acima, vamos supor que queremos obter, de forma atualizada, os últimos registros publicados nos últimos 2 dias a partir da data atual. Veja os exemplos a seguir:

a) Usando a função DATE_ADD:

$sql = SELECT * FROM videos WHERE publicado > DATE_ADD(CURDATE(),INTERVAL -2 DAY) ORDER BY publicado DESC

Na consulta acima selecionamos os últimos registros dos 2 últimos dias a partir do dia atual. Portanto, obteremos os registros dos dias 10/07/2019 a 12/07/2019, considerando que o nosso exemplo foi feito em 12/07/2019.

Obs 1.: Usamos uma tabela MySQL de exemplo denominada videos e o campo publicado conforme nossa tabela de exemplo acima.

Obs 2.: Ordenamos a nossa seleção pelas datas (campo "publicado") de forma decrescente (ORDER BY publicado DESC). Você também poderá optar por ordenar de forma crescente ou, se desejar, não ordenar os resultados da consulta.

Veja a seguir o exemplo completo onde listamos os registros definidos pela consulta acima. É importante salientar que utilizamos a extensão PDO para conectar como Banco de Dados:

<?php
require 'config.php'; // conexão com o banco de dados (variável $con)

echo '<h1>Usando DAT_ADD - Exemplo realizado em 12/07/2019</h1>';
echo '<h2>Exemplo 1 - Registros publicados últimos 2 dias a partir da data atual</h2>';

$sql = "SELECT * FROM videos WHERE publicado > DATE_ADD(CURDATE(),INTERVAL -2 DAY) ORDER BY publicado DESC";
$sql = $con->query($sql);
$lista = $sql->fetchAll(); 

echo '<table border="1" style="border-collapse: collapse;">';
    echo '<tr>';
        echo '<th>Data</th>';
        echo '<th >Título</th>';
    echo '</tr>';
foreach ($lista as $campo) {
        echo '<tr>';
            echo '<td>'.$campo['publicado'].'</td>';
            echo '<td>'.$campo['titulo'].'</td>';
        echo '</tr>';
}
 echo '</table>';

Para extensão MySQLi:

<?php
require 'config.php'; // conexão com o banco de dados

echo '<h1>Usando DAT_ADD - Exemplo realizado em 12/07/2019</h1>';
echo '<h2>Exemplo 1 - Registros publicados últimos 2 dias a partir da data atual</h2>';

$sql = "SELECT * FROM videos WHERE publicado > DATE_ADD(CURDATE(),INTERVAL -2 DAY) ORDER BY publicado DESC";
$sql = $con->query($sql);

echo '<table border="1" style="border-collapse: collapse;">';
    echo '<tr>';
        echo '<th>Data</th>';
        echo '<th >Título</th>';
    echo '</tr>';
    while ($campo = $sql->fetch_assoc()) {
        echo '<tr>';
            echo '<td>'.$campo['publicado'].'</td>';
            echo '<td>'.$campo['titulo'].'</td>';
        echo '</tr>';
     }
     
 echo '</table>';

Veja o resultado abaixo (extensão PDO ou MySQLi):

Observe que somente obtivemos os registros dos dias 10 a 12/07/2019, pois rodamos este exemplo no dia 12/07/2019. O código portanto automatiza a seleção de registros, buscando sempre os último registros dos últimos 2 dias.

b) Usando a função DATE_SUB:

SELECT * FROM videos WHERE publicado > DATE_SUB(CURDATE(),INTERVAL 2 DAY) ORDER BY publicado DESC

Na consulta acima selecionamos os últimos registros dos 2 últimos dias a partir do dia atual. Portanto, obteremos os registros dos dias 10/07/2019 a 12/07/2019, considerando que o nosso exemplo foi feito em 12/07/2019.

Obs 1.: Usamos uma tabela MySQL de exemplo denominada videos e o campo publicado conforme nossa tabela de exemplo acima.

Obs 2.: Ordenamos a nossa seleção pelas datas (campo "publicado") de forma decrescente (ORDER BY publicado DESC). Você também poderá optar por ordenar de forma crescente ou, se desejar, não ordenar os resultados da consulta.

Veja a seguir o exemplo completo onde listamos os registros definidos pela consulta acima. É importante salientar que utilizamos a extensão PDO para conectar como Banco de Dados:

<?php
require 'config.php'; // conexão com o banco de dados (variável $con)

echo '<h1>Usando DAT_SUB - Exemplo realizado em 12/07/2019</h1>';
echo '<h2>Exemplo 2 - Registros publicados últimos 2 dias a partir da data atual</h2>';

$sql = "SELECT * FROM videos WHERE publicado > DATE_SUB(CURDATE(),INTERVAL 2 DAY) ORDER BY publicado DESC";
$sql = $con->query($sql);
$lista = $sql->fetchAll(); 

echo '<table border="1" style="border-collapse: collapse;">';
    echo '<tr>';
        echo '<th>Data</th>';
        echo '<th >Título</th>';
    echo '</tr>';
foreach ($lista as $campo) {
        echo '<tr>';
            echo '<td>'.$campo['publicado'].'</td>';
            echo '<td>'.$campo['titulo'].'</td>';
        echo '</tr>';
}
 echo '</table>';

Para extensão MySQLi:

<?php
require 'config.php'; // conexão com o banco de dados

echo '<h1>Usando DAT_SUB - Exemplo realizado em 12/07/2019</h1>';
echo '<h2>Exemplo 2 - Registros publicados últimos 2 dias a partir da data atual</h2>';

$sql = "SELECT * FROM videos WHERE publicado > DATE_SUB(CURDATE(),INTERVAL 2 DAY) ORDER BY publicado DESC";
$sql = $con->query($sql);

echo '<table border="1" style="border-collapse: collapse;">';
    echo '<tr>';
        echo '<th>Data</th>';
        echo '<th >Título</th>';
    echo '</tr>';
    while ($campo = $sql->fetch_assoc()) {
        echo '<tr>';
            echo '<td>'.$campo['publicado'].'</td>';
            echo '<td>'.$campo['titulo'].'</td>';
        echo '</tr>';
     }
     
 echo '</table>';

Veja o resultado abaixo (extensão PDO ou MySQLi):

Observe que somente obtivemos os registros dos dias 10 a 12/07/2019, pois rodamos este exemplo no dia 12/07/2019. O código portanto automatiza a seleção de registros, buscando sempre os último registros dos últimos 2 dias.

 Documentação Oficial

1. [DATE_ADD()] » Manual do MySQL (Date and Time Functions)

2. [DATE_SUB()] » Manual do MySQL (Date and Time Functions)

3. [CURDATE()] » Manual do MySQL (Date and Time Functions)

4. [Extensão PDO] » Manual sobre PDO - PHP Data Objects.

5. [Extensão MySQLi] » Manual sobre a extensão MySQLi.

O anúncio abaixo ajuda manter o Portal Visual Dicas

Comentários

×

Infomações do site / SEO