Задать вопрос
@Leytenant

Как составить запрос MySQL для сортировки записей по дню рождения?

Подскажите, пожалуйста, как отсортировать одним запросом записи таблицы по ближайшему дню рождения?

Таблица:
CREATE TABLE IF NOT EXISTS `oleg_birth` (
`birthday` date NOT NULL,
`name` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `oleg_birth`
--

INSERT INTO `oleg_birth` (`birthday`, `name`) VALUES
('1979-09-20', 'Андрей Александрович'),
('1985-04-01', 'Мария Александровна'),
('1983-03-25', 'Иван Васильевич'),
('1954-01-01', 'Николай Иванович'),
('1984-05-16', 'Валентина Павловна'),
('1975-08-10', 'Саша'),
('1975-12-31', 'Ваня'),
('1990-05-02', 'Николай Петрович'),
('1988-04-06', 'Оксана Сергеевна'),
('1979-09-20', 'Андрей Александрович'),
('1985-04-01', 'Мария Александровна'),
('1983-03-25', 'Иван Васильевич'),
('1954-01-01', 'Николай Иванович'),
('1984-05-16', 'Валентина Павловна'),
('1975-08-10', 'Брат'),
('1983-07-15', 'Наталья'),
('1954-11-01', 'Николай'),
('1984-09-16', 'Павел'),
('1975-04-10', 'Брат'),
('1990-05-02', 'Николай Петрович'),
('1988-04-06', 'Оксана Сергеевна');
  • Вопрос задан
  • 2336 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
@Leytenant Автор вопроса
Вроде нашел решение:

SELECT
name,
birthday,
DAYOFWEEK(birthday),
birthday + INTERVAL(YEAR(CURRENT_TIMESTAMP) - YEAR(birthday)) + 0 YEAR AS currbirthday,
birthday + INTERVAL(YEAR(CURRENT_TIMESTAMP) - YEAR(birthday)) + 1 YEAR AS nextbirthday
FROM oleg_birth
ORDER BY CASE WHEN currbirthday < CURRENT_TIMESTAMP
THEN nextbirthday
ELSE currbirthday
END
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@VoRez
Backend web developer.
SELECT * FROM `oleg_birth` WHERE `birthday` > <ТЕКУЩАЯ ДАТА> ORDER BY `birthday`

Надеюсь я правильно вас понял, вам нужны отсортированные даты рождения?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы