Я полностью зациклен на этом, пытаясь часами, но безуспешно, надеясь, что кто-то сможет помочь. Попытка построить скрипт 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)
Попробуй это.