MySQL запрос по точной дате

Я запрашиваю свою базу данных и пытаюсь получать сообщения в блоге ровно 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);

Что я могу сделать, чтобы получить ровно год? Я мог бы написать цикл для увеличения года, если бы мог вычислить запросы ровно на один год.

0

Решение

Если это 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», это даст странные результаты.

2

Другие решения

пожалуйста, попробуйте этот запрос

  SELECT * FROM posts
WHERE `user_id` = '$user_id' AND date(post_date) >=date_sub(CURDATE() , INTERVAL 1 YEAR)
ORDER BY post_date DESC
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector