powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите поздравить именинников на работе!!!!!!
7 сообщений из 7, страница 1 из 1
Помогите поздравить именинников на работе!!!!!!
    #32396737
сабж, господа!!!
А то поздравляю всех подряд... :-))

есть такая таблица:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
СREATE TABLE  /*!32300 IF NOT EXISTS*/  info_employe (
  employe_id int( 3 ) unsigned NOT NULL auto_increment,
  employe_date date NOT NULL DEFAULT '0000-00-00' ,
  employe_lname varchar( 32 ) NOT NULL DEFAULT '' ,
  employe_fname varchar( 32 ) NOT NULL DEFAULT '' ,
  employe_mname varchar( 32 ) NOT NULL DEFAULT '' ,
  employe_division varchar( 32 ) , //отдел
  employe_is_dismissed tinyint( 3 ) unsigned ,  /* флаг уволен или нет */ 
  employe_is_retiree tinyint( 3 ) unsigned ,      /* флаг пенсионер или нет */ 
  PRIMARY KEY (employe_id),
  INDEX id_employe_2 (employe_id)
);



#
# Dumping data for table 'info_employe'
#
INSERT INTO info_employe VALUES( "1 ", "1953 - 05 - 26 ", "Иванова" , "Лида" , "Иосифовна" , "БТЗ" , "0 ", "1 ");
INSERT INTO info_employe VALUES( "5 ", "1961 - 10 - 24 ", "Быбина" , "Светлана" , "Петровна" , "Бухгалтерия" , "0 ", "0 ");


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

Использую пхп+мускул

для одного дня все ясно:
Код: plaintext
1.
SELECT * from info_employe where
MONTH(employe_date)= 2  and (DAYNAME(employe_date)= 1 );


можно сделать тупо:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT * from info_employe where
(MONTH(employe_date)= 1  and (DAYNAME(employe_date)= 30 ))
OR
(MONTH(employe_date)= 1  and (DAYNAME(employe_date)= 31 ))
OR
(MONTH(employe_date)= 2  and (DAYNAME(employe_date)= 1 ))
OR
(MONTH(employe_date)= 2  and (DAYNAME(employe_date)= 2 ))
OR
(MONTH(employe_date)= 2  and (DAYNAME(employe_date)= 3 ));


у меня тут еще и личный интерес :-)
5-го у самого будет ДР.
Не дайте мне остаться без поздравления, плиззззз...
...
Рейтинг: 0 / 0
Помогите поздравить именинников на работе!!!!!!
    #32396824
что, никто не поможет мне?
...
Рейтинг: 0 / 0
Помогите поздравить именинников на работе!!!!!!
    #32396888
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
примерно так
Код: plaintext
1.
2.
3.
4.
SELECT .... WHERE
employe_date BETWEEN DATE_SUB(NOW(), INTERVAL  1  DAY)
AND
DATE_ADD(NOW(), INTERVAL  1  DAY)
ORDER BY employe_date
...
Рейтинг: 0 / 0
Помогите поздравить именинников на работе!!!!!!
    #32396907
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не очень сложно, примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT * FROM info_employe
WHERE
employe_date >= DATE_ADD(CURDATE(), INTERVAL - 2  DAY)
AND
employe_date <= DATE_ADD(CURDATE(), INTERVAL  2  DAY)
ORDER BY DATE_FORMAT(employe_date, '%j')
 -- или (сверху неясно с високосным годом)
 
ORDER BY DATE_FORMAT(employe_date, '%m %d')

Вот ссылки на функции DATE_ADD() и DATE_FORMAT()

. http://sql.ru/]mahoune
...
Рейтинг: 0 / 0
Помогите поздравить именинников на работе!!!!!!
    #32396986
Господа!
Я наверное не правильно или непонятно задал вопрос, извините...

В обоих случаях нет результатов потому, что берутся конкретные даты:
например
я родился 5 февраля 1977 года

сегодня 3 февраля 2004 года

надо вывести всех у которых дни рождения +-2 дня включительно (ну для примера с переходом с месяца на месяц возьмем 4 дня), т.е. с 30 января по 7 февраля любого года.

Так вот: в оба запроса я не попал, так как оба предложенных варианта ищут дни рождения от с 30 января по 7 февраля ТЕКУЩЕГО ГОДА .

Макс М.
Код: plaintext
1.
2.
3.
4.
SELECT .... WHERE
employe_date BETWEEN DATE_SUB(NOW(), INTERVAL  1  DAY)
AND
DATE_ADD(NOW(), INTERVAL  1  DAY)
ORDER BY employe_date


mahoune
Код: plaintext
1.
2.
3.
4.
5.
SELECT * FROM info_employe
WHERE
employe_date >= DATE_ADD(CURDATE(), INTERVAL - 2  DAY)
AND
employe_date <= DATE_ADD(CURDATE(), INTERVAL  2  DAY)
ORDER BY DATE_FORMAT(employe_date, '%j')


а так то да, все просто:
Код: plaintext
1.
2.
3.
4.
5.
SELECT * FROM info_employe
WHERE
employe_date >= (CURDATE() - INTERVAL  4  DAY)
AND
employe_date <= (CURDATE() + INTERVAL  4  DAY)
ORDER BY DATE_FORMAT(employe_date, '%j')


А пустой датасет возвращается потому, что те люди которые в него могли попасть еще не работают у нас: они либо еще не родились, либо их еще не выписали с мамами из роддома. Извините за сакразм...
...
Рейтинг: 0 / 0
Помогите поздравить именинников на работе!!!!!!
    #32397138
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а как на счет самому чуток подумать?
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT * FROM info_employe
WHERE
DATE_FORMAT(employe_date, CONCAT(YEAR(CURDATE()),'-%m-%d')) >= DATE_ADD(CURDATE(), INTERVAL - 2  DAY)
AND
DATE_FORMAT(employe_date, CONCAT(YEAR(CURDATE()),'-%m-%d')) <= DATE_ADD(CURDATE(), INTERVAL  2  DAY)
ORDER BY DATE_FORMAT(employe_date, '%j')


. http://sql.ru/]mahoune
...
Рейтинг: 0 / 0
Помогите поздравить именинников на работе!!!!!!
    #32397385
mahoune, ты спас меня!!!
На внутреннем сайте компании я уже есть в списке именинников!
Большое спасибо за поздравление :-)))
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите поздравить именинников на работе!!!!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]