Как выбрать дни рождения?

Есть такая таблица - (date - день рождение)
CREATE TABLE `birthday` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `date` datetime DEFAULT '0000-00-00 00:00:00',
  `name` tinytext,
  `photo` tinytext,
  `description` tinytext,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=241 DEFAULT CHARSET=cp1251;


Как выбрать три ближайших прошедших и три ближайших грядущих? Только если в сегодняшнем дне есть именинники - их тоже нужно выбрать. В интернете есть куча вариантов, но везде какие-то ньюансы
  • Вопрос задан
  • 178 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А нюансов и будет куча. Если, например, сегодня у семи человек дни рождения, какие из них должны попасть в выборку? А если это всё не учитывать, то несложно
(SELECT *
  FROM `birthday`
  WHERE MONTH(`date`) > MONTH(CURDATE())
    OR (MONTH(`date`) = MONTH(CURDATE()) 
      AND DAYOFMONTH(`date`) = DAYOFMONTH(CURDATE()))
  ORDER BY MONTH(`date`), DAYOFMONTH(`date`)
  LIMIT 3)
UNION (SELECT *
  FROM `birthday`
  WHERE MONTH(`date`) = MONTH(CURDATE()) 
      AND DAYOFMONTH(`date`) = DAYOFMONTH(CURDATE()))
UNION (SELECT *
  FROM `birthday`
  WHERE MONTH(`date`) < MONTH(CURDATE())
    OR (MONTH(`date`) = MONTH(CURDATE()) 
      AND DAYOFMONTH(`date`) < DAYOFMONTH(CURDATE()))
  ORDER BY MONTH(`date`) DESC, DAYOFMONTH(`date`) DESC
  LIMIT 3)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
date between date_sub(now(), interval N day) and  date_add(now(), interval N day)

Какие там еще ньюансы?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы