Mysql получить данные по годам с нумерацией страниц

Мне нужно получить данные на основе года с разбивкой на страницы, если число строк меньше, то поиск в следующем году

SELECT *
FROM `user_notifications`
WHERE DATE_FORMAT(created_at, '%Y') = '2019'
ORDER BY `created_at` DESC
LIMIT 0,10

если количество строк меньше 10, то поиск по году 2018

2

Решение

Я думаю, что вам просто нужно WHERE пункт, чтобы включить и 2018 и 2019:

SELECT *
FROM user_notifications
WHERE YEAR(created_at) IN (2018, 2019)
ORDER BY created_at DESC
LIMIT 10;
0

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

Учитывая, что ваши результаты отсортированы по created_at DESCЯ не думаю, что WHERE пункт нужен вообще. Если с 2019 года будет недостаточно результатов, ваш запрос будет автоматически возвращать результаты с 2018, 2017, 2016 и т. Д. По мере необходимости, чтобы получить 10 строк:

SELECT *
FROM `user_notifications`
ORDER BY `created_at` DESC
LIMIT 10
1

Если я правильно прочитал, это звучит как простое упражнение по заказу

  SELECT *
FROM user_notifications
WHERE created_at < :input_year + INTERVAL 1 YEAR
ORDER BY created_at DESC
LIMIT :offset, 10;

Если вы хотите вернуться только на один год назад, вы можете просто добавить другое условие

  SELECT *
FROM user_notifications
WHERE created_at < :input_year + INTERVAL 1 YEAR
AND created_at >= :input_year - INTERVAL 1 YEAR
ORDER BY created_at DESC
LIMIT :offset, 10;

Не то чтобы с помощью функции, как YEAR() на created_at а не сравнение (<,> =) не позволит двигателю использовать индекс created_at

0

использование https://dev.mysql.com/doc/refman/8.0/en/year.html

SELECT *
FROM user_notifications
WHERE YEAR(created_at) <= $searchYear
ORDER BY created_at DESC
LIMIT 0, 10;
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector