Я запрашиваю свою базу данных и пытаюсь получать сообщения в блоге ровно 1 год назад (точнее, каждый год), следующий код должен делать это в соответствии с тем, что я нашел, но вместо этого он получает ВСЕ сообщения за последний год.
$sql = "SELECT * FROM posts
WHERE `user_id` = '$user_id' AND post_date > CURDATE() - INTERVAL 1 YEAR
ORDER BY post_date DESC ";
$result = $dbc->query($sql);
Что я могу сделать, чтобы получить ровно год? Я мог бы написать цикл для увеличения года, если бы мог вычислить запросы ровно на один год.
Если это WordPress, post_date
это поле DATETIME. Так ровно год назад означает «2014-03-16 09:03:27». Я сомневаюсь, что это то, что вы хотите. Я думаю ты хочешь в этот день в прошлом году
Попробуй это:
post_date >= CURDATE() - INTERVAL 1 YEAR
AND post date < CURDATE() - INTERVAL 1 YEAR + INTERVAL 1 DAY
Эта пара условий принимает все сообщения, начиная с полуночи того дня год назад, но не включая полуночи следующего дня. MySQL реализует их с помощью эффективного сканирования диапазона индекса.
Если вы ищете посты, которые произошли в этот день года для любого года, вам нужно такое выражение.
MONTH(CURDATE()) = MONTH(post_date)
AND DAYOFMONTH(CURDATE()) = DAYOFMONTH(post_date)
Это будет не так быстро, как мое первое предложение, потому что он не может использовать индекс. Кроме того, в високосные даты, такие как «2016-02-29», это даст странные результаты.
пожалуйста, попробуйте этот запрос
SELECT * FROM posts
WHERE `user_id` = '$user_id' AND date(post_date) >=date_sub(CURDATE() , INTERVAL 1 YEAR)
ORDER BY post_date DESC