MySQL выбирает строки ровно 7 дней назад

Я полностью зациклен на этом, пытаясь часами, но безуспешно, надеясь, что кто-то сможет помочь. Попытка построить скрипт cron для ежедневной работы, который возвращает строки, которые ровно на 7 дней старше текущей.

Дело в том, что мой запрос ничего не возвращает. Нет сообщений об ошибках, ничего (я знаю, что в базе данных есть записи за последние 7 дней – мы получаем около 7000 новых записей в день, так что они есть!) Я пробовал SELECT * и успешно удалял дату редактирования , поэтому все работает, кроме моего SQL-скрипта.

Столбец, на который я ссылаюсь (edit_date), является типом 'datetime', сформированным с помощью Ymd hms. Этот столбец всегда имеет значение даты и времени, назначенное как для создания, так и для редактирования.

function get_ad_sql($table){ $sql = "SELECT * FROM ".$table." WHERE edit_date = DATE_SUB(NOW(), INTERVAL 7 DAY) "; return $sql; } 

И вызов функции и «попытка» для эхо-файла primary_key:

 $sqlAng = get_ad_sql('angebote'); $result = mysql_query($sqlAng); while($row = mysql_fetch_array($result)){ echo $row['primary_key']; } 

Я пробовал каждый вариант DATE_SUB (NOW (), INTERVAL 7 DAY), включая CURDATE (), DATE_FORMAT (edit_date, «% m /% d /% Y»), которые я мог найти здесь и в Интернете, t получить что-нибудь для работы. Надеюсь, кто-нибудь может мне помочь!

    Очень редко можно получить те же записи даты и времени, что дает дату и время до нескольких секунд. Поэтому для получения соответствующих результатов нам нужно игнорировать временную часть и обрабатывать дату, поэтому, используя CURDATE() .

    Вы можете сделать это, игнорируя временную часть и сравнивая ее с датой, используя следующую команду:

     function get_ad_sql($table){ $sql = "SELECT * FROM ".$table." WHERE DATE(edit_date) = DATE_SUB(CURDATE(), INTERVAL 7 DAY) "; return $sql; } 

    Ваш скрипт работает … Я очень сомневаюсь, что у вас есть что-то ровно 7 дней назад (ко второму).

    Возможно, вы хотели что-то WHERE edit_date>DATE_SUB(NOW, INTERVAL 7 DAY) AND edit_date<DATE_SUB(NOW, INTERVAL 6 DAY) ?

    Или, если вы хотите сравнить только дату (а не время), сравните результат DATE() .

    NOW () возвращает значение DATETIME, вы должны использовать функцию DATE для получения даты без времени, например –

     SELECT * FROM table WHERE edit_date = DATE_SUB(DATE(NOW()), INTERVAL 7 DAY); 

    Если тип поля edit_date равен DATETIME, это поле также должно быть обернуто функцией DATE ()

     SELECT * FROM table WHERE DATE(edit_date) = DATE_SUB(DATE(NOW()), INTERVAL 7 DAY); 
      SELECT SUBDATE(CURDATE(), 7) 

    Попробуй это.