У кого День Рожд в течении

2People

Новичок
У кого День Рожд в течении

мне надо вывести пользователей у которых ДР будет в течении Х дней (в примере 14), начиная с сейчас.
Делаю всё по мануалу.
когда ставлю <=27 дней всё работает, когда больше - нет. Видимо это из-за того, что наступет новый год. Хотя я использую DATE_ADD.
Вот запрос:
PHP:
SELECT * FROM `clients` WHERE RIGHT(birthday,5) BETWEEN RIGHT(CURRENT_DATE,5) AND RIGHT(DATE_ADD(CURRENT_DATE, INTERVAL 14 DAY),5)
Возможно Мускл не может сравнить даты над которыми сделано RIGHT(). Т.е. 04.12 и 02.01, хотя это поле date.

Не могу сделать.... Подскажите
 

alexhemp

Новичок
2People

Ты не то делаешь.

Тебе нужно взять 2 даты - одну текущую: NOW()
а другую текущую + 14 дней: DATE_ADD(NOW(), INTERVAL 14 DAY)

А потом ищи клиентов, у которых д.р. между этими датами - испольуй BETWEEN

т.е. WHERE birthday BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 14 DAY)
 

2People

Новичок
Ну так дата находится в поле DATE. Там записан год, чтобы убрать год делаю RIGHT(CURRENT_DATE,5)

То, что ты написал выводит тех, кто родится в течении 14 дней, а мне не надо прогнозировать рождаемость.
 

chira

Новичок
общий случай нахождения всех именников между датами $Date1 и $Date2
Код:
SELECT
......
FROM
......
 WHERE
  CONCAT(YEAR($Date1),'-',DATE_FORMAT(birthday,'%m-%d')) BETWEEN $Date1 AND $Date2
  OR CONCAT(YEAR($Date2),'-',DATE_FORMAT(birthday,'%m-%d')) BETWEEN $Date1 AND $Date2
 

alexhemp

Новичок
2People

Я тебя уговаривать не буду.
Тебе нужно вывести все записи, у которых поле birthday в интервале от "сейчас" до "сейчас + 14"

Какая проблема в том, чтобы сперва вычислить интервал, потом поискать записи в этом интервале?
 

2People

Новичок
Автор оригинала: alexhemp
2People

Я тебя уговаривать не буду.
Тебе нужно вывести все записи, у которых поле birthday в интервале от "сейчас" до "сейчас + 14"

Какая проблема в том, чтобы сперва вычислить интервал, потом поискать записи в этом интервале?
поле birthday содержит записи, например:
1980-12-17 и 1990-12-06

"сейчас" - 04.11.2005
"сечас +14 дней" - 18.11.2005

ни 1980-12-17, ни 1990-12-06 не лежат м/д "сейчас" и "сечас +14 дней"! А день рождения у них будет в течении 14 дней.

-~{}~ 05.12.05 00:35:

Автор оригинала: chira
общий случай нахождения всех именников между датами $Date1 и $Date2
Код:
SELECT
......
FROM
......
 WHERE
  CONCAT(YEAR($Date1),'-',DATE_FORMAT(birthday,'%m-%d')) BETWEEN $Date1 AND $Date2
  OR CONCAT(YEAR($Date2),'-',DATE_FORMAT(birthday,'%m-%d')) BETWEEN $Date1 AND $Date2
Симпотично! Спасибо!

-~{}~ 05.12.05 00:43:
Хм. Я решил потестировать примеры из мануала, взял этот:
mysql> SELECT name, birth FROM pet
-> WHERE MONTH(birth) = MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH));
- работает как и должно

mysql> SELECT name, birth FROM pet
-> WHERE MONTH(birth) <= MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH));
-не работает (выводит все записи, как будто не используется MONTH, т.е. похоже, что учитывает и год)

mysql> SELECT name, birth FROM pet
-> WHERE MONTH(birth) < MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH));
-совсем неожиданный результат

Почему так?
 

bosh

Новичок
select MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH));
А потом, к примеру.
select distinct MONTH(birth) from clients;
я думаю ответит на твой вопрос.
 
Сверху