Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280

Оптимизировать запрос

15.03.2013, 12:27. Показов 983. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Такая задача: в произвольной таблице (пусть будет dr_main) хранятся данные сотрудников, среди прочих дата рождения в формате date. Необходимо составить максимально короткий запрос, выводящий фио сотрудников, день рождения которых приходятся на ближайший месяц (с завтрашнего дня).

Пока что ничего короче этого не получается:
MySQL
1
2
3
4
5
6
7
8
9
10
(SELECT fam, nam, last, dn
FROM dr_main
WHERE month( dn ) = month( current_date )
AND day( dn ) > day( current_date )
)UNION (
SELECT fam, nam, last, dn
FROM dr_main
WHERE month( dn ) = month( current_date ) +1
AND day( dn ) <= day( current_date )
)
Подскажите, пожалуйста, в каком направлении думать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.03.2013, 12:27
Ответы с готовыми решениями:

Оптимизировать запрос
В базе есть примерно 25000 записей-товаров. У каждого есть запись - номер категории. Каждая категория может иметь подкатегории, всего до...

Оптимизировать запрос
Есть 3 таблицы table1 (id, name) table2_1 (table1_id, table3_1_id) table3_1 (id, value) table2_2 (table1_id,...

Оптимизировать запрос
Здравствуйте. Пытаюсь составить запрос, выполняющий выборку. Не уверен, возможно ли улучшить временные характеристики, но моих знаний точно...

4
 Аватар для Crast
72 / 72 / 5
Регистрация: 10.02.2013
Сообщений: 434
15.03.2013, 14:08
Вот эквивалент твоего запроса, но он не будет работать в декабре
MySQL
1
2
3
(SELECT fam, nam, last, dn
FROM dr_main
WHERE ABS (DATE_FORMAT(dn,'%j') - DATE_FORMAT(current_date(),'%j')) < 31)
Добавлено через 2 минуты
Да и заберет 31 день раньше.
0
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
15.03.2013, 14:38  [ТС]
Нет, они не эквивалентны.
Миниатюры
Оптимизировать запрос   Оптимизировать запрос  
0
 Аватар для Crast
72 / 72 / 5
Регистрация: 10.02.2013
Сообщений: 434
15.03.2013, 15:04
Вообще-то я имел ввиду вот этот запрос.
MySQL
1
2
3
4
(SELECT fam, nam, last, dn
FROM dr_main
WHERE (DATE_FORMAT(dn,'%j') - DATE_FORMAT(current_date(),'%j')) < 31 AND
          (DATE_FORMAT(dn,'%j') - DATE_FORMAT(current_date(),'%j')) > 0)
Выбирает на 31 день вперед. Предыдущий брал еще дни назад из-за того что брал абсолютные значения.
1
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
15.03.2013, 16:33  [ТС]
Спасибо, возникло пару вопросов:
1. Почему при
MySQL
1
DATE_FORMAT(dn,'%j') - DATE_FORMAT(current_date(),'%j')) > 0
выводятся те, у кого день рождения сегодня, ведь там как разность равна нулю?
2.Воспользовавшись этой идеей решил укоротить запрос:
MySQL
1
2
3
SELECT fam, nam, last, dn
FROM dr_main
WHERE  DATE_FORMAT (dn,'%j') BETWEEN DATE_FORMAT (current_date(),'%j') AND DATE_FORMAT (current_date()+31,'%j')
но он не работает (то есть под его условие ничего не попадает), что в нем не так?

Добавлено через 28 минут
Со вторым вопросом, уже разобрался:
MySQL
1
2
3
SELECT fam, nam, last, dn
FROM dr_main
WHERE  DATE_FORMAT (dn,'%j') BETWEEN DATE_FORMAT (current_date(),'%j') AND (DATE_FORMAT (current_date(),'%j')+31)
понятно, что он не совсем соответствует условию.

Добавлено через 51 минуту
Разобрался и с первым: там выводился человек, родившийся в високосном году
Кроме того, оптимизировал свой запрос до следующего:
MySQL
1
2
3
4
SELECT fam, nam, last, dn
FROM dr_main
WHERE  DATE_FORMAT (dn,'%j')> DATE_FORMAT (current_date(),'%j') AND DATE_FORMAT (dn,'%j')<=(DATE_FORMAT ((DATE_ADD( current_date( ) , INTERVAL 1
MONTH )),'%j'))
он вполне корректен, - а есть ли возможность оптимизировать его?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.03.2013, 16:33
Помогаю со студенческими работами здесь

оптимизировать sql запрос
Добрый день! Есть две таблицы, первая id,ip,login,pass вторая id и ip которые в онлайне. Нужно вывести одну запись (ip,login,pass)...

Можно ли оптимизировать запрос с LIKE
Вот есть такой запрос: SELECT * FROM table WHERE Address NOT LIKE '%Москва%' AND Address NOT LIKE '%МО%' AND Address NOT LIKE...

SQL оптимизировать запрос
Здравствуйте друзья, есть вопрос к вам Допустим у меня имеется следующая таблица &quot;Показатели_продаж&quot; ...

Как оптимизировать запрос
Добрый день! Есть таблица tasks у нее связь к log (один-ко-многим) и также у tasks к таблице template (один-ко-многим). Как лучше вывести...

Как оптимизировать запрос
есть таблица reports, структура примерно такая id int(11) | date int(11) | login varchar(50) | money double(10,2)| В ней 9 млн...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru