Удалить запись между текущей датой и прошлой неделей - интервал 14 дней

У меня есть этот кусок кода, который - создать папку - создать файл резервной копии - удаляет из БД все данные за 7 дней до текущей даты

Они попросили меня изменить: - Учитывая период 14 дней удалить все данные с 8 дня по 14

Или, если сегодня 2019/04/08, выберите до двух недель назад 2019/03/25, он удаляет все, что идет с 2019/03/31 и оставляет в БД все, что идет с 2019/04/01 до текущей даты (2019/04/08)

Потом удаляет все предыдущее за две недели с 8 дня до 14 и оставляет на бд все что идет от текущей даты до 7 дней до.

Я знаю, что это делается с between, но я не могу правильно написать запрос

   <?php
    $databaseHost = 'xxx';
    $databaseName = 'xxx';
    $databaseUsername = 'xxx';
    $databasePassword = 'xxx';
    $connessione = mysqli_connect($databaseHost, $databaseUsername, $databasePassword, $databaseName);



    $query = $connessione->query("
        SELECT *
        FROM utenti
        WHERE data_password < DATE_SUB(NOW(), INTERVAL 7 DAY)

    ");

    $results = $query->fetch_all(MYSQLI_ASSOC);
    $ok = json_encode($results);

    function makeDirectory($path, $mode)
    {
        // this creates if not exist
        if (!is_dir($path)) {
            return mkdir($path, $mode, true);
        } else {
            echo $path . " already exist!";
        }
    }

    $path = 'backup_LOG';
    $mode = 0777;

    // or you can add here that if exist does not call the function makeDirectory
    if (!is_dir($path)) {
        $risultato = makeDirectory($path, $mode);
    }

    $fileName = 'backup_LOG/backup_file_' . date('Y_m_d') . '.txt';
    $file = fopen($fileName,  'a');
    //$file = fopen($fileName, 'x+');
    fwrite($file, $ok);
    fclose($file);

    if (count($results) > 0) {
        $firstId = reset($results)['data_password'];
        $lastId = end($results)['data_password'];
        $stmt = $connessione->prepare("DELETE FROM utenti WHERE data_password < DATE_SUB(NOW(), INTERVAL 7 DAY)");
        $stmt->bind_param('ii', $firstId, $lastId);
        $stmt->execute();
    }
    ?>
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
887
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

DELETE FROM utenti WHERE data_password > DATE_SUB(NOW(), INTERVAL 14 DAY) AND data_password < DATE_SUB(NOW(), INTERVAL 7 DAY);

Также я не уверен, правильно ли вы называете имя столбца: data_password

Но независимо от того, как бы я это сделал.

Вам также может понадобиться указать data_password как дату, если она содержит такую ​​дату:

DATE(data_password) > ...
Ответ принят как подходящий

Бывает, что BETWEEN не подходит для значений даты, потому что в конце диапазона выдает ошибку «отклонение на единицу». Попробуйте этот запрос.

DELETE 
 FROM utenti 
WHERE data_password >= CURDATE() - INTERVAL 14 DAY
  AND data_password < CURDATE() - INTERVAL 7 DAY

Это предложение WHERE принимает любое значение даты в полночь или после полуночи четырнадцать дней назад и каждое значение даты до полуночи — до первого момента — семь дней назад.

Итак, если сегодня 16 марта 2019 года, он примет все со значением data_password в диапазоне от 2018-03-02 00:00 до 2019-03-08 23:59:59.9999.

Чтобы это работало правильно, тип данных столбца должен быть DATE, DATETIME или TIMESTAMP. Индекс столбца может сделать запрос довольно быстрым.

Вы можете использовать NOW() вместо CURDATE(), если хотите удалить элементы, которые старше 14 дней.

Другие вопросы по теме