Запросить строки базы данных, где столбец отметки времени старше X часов - PullRequest
0 голосов
/ 02 марта 2020

У меня есть несколько строк в таблице базы данных MySQL, с полем last_update (TIMESTAMP), чтобы регистрировать их в последний раз. На данный момент я пропускаю все строки каждые 300 секунд и проверяю, прошло ли более 3 часов, а затем обновляю эту строку, если это так.

    $update_delay = 180;

    $table_name = $wpdb->prefix . "products";
    $results = $wpdb->get_results( "SELECT id, prod_id, last_update FROM $table_name" );

    foreach ($results as $result)
    {
        $last_update = $result->last_update;

        if (time() - strtotime($last_update) > $update_delay * 60)
        {

Поскольку это неэффективно Я хотел бы запросить только те строки, где отметка времени старше 3 часов. Поскольку это поле имеет формат «2020-03-01 23:22:06», я думаю, что могу сделать что-то вроде следующего, но я не уверен, могу ли я сделать это, используя INTERVAL в запросе, или если проверить дату значение должно быть в PHP.

$old_timestamp = date('Y-m-d G:i:s') . "- 3 hours";

$results = $wpdb->get_results( "SELECT id, prod_id FROM $table_name WHERE last_update > $old_timestamp" );

Что было бы хорошим вариантом для эффективной реализации этого?

Ответы [ 2 ]

3 голосов
/ 02 марта 2020

Я хотел бы запросить только те строки, где отметка времени старше 3 часов

Нет необходимости указывать c код приложения. MySQL понимает арифметику даты:

WHERE last_update > NOW() - INTERVAL 3 HOUR
0 голосов
/ 02 марта 2020

Как то так?

$old_timestamp = date('Y-m-d G:i:s');
$results = $wpdb->get_results( 
    "SELECT id, prod_id FROM $table_name WHERE last_update > date_add($old_timestamp") -3 hours)
);
...