![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: нет Всего: 6 |
Есть следующая задача. Есть объект "Мероприятие" у которого есть:
1. Дата начала 2. Дата конца 3. Дни недели в которые он активен (с этим как раз и сложность). Задача определить будет ли это мероприятие проходить в произвольный день. Если бы мы имели объект с параметрами 1 и 2, то задача была бы достаточно травильной, но вот как реализовать поиск с учетом еще и третьего параметра? З.ы. студенческий вариант решения задачи "в лоб" я могу придумать, но нужно решение, которое будет работать и при высокой нагрузке на сервер. |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 1 Всего: 19 |
DAYOFWEEK(date) ?
-------------------- You're face to face With man who sold the world |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Убираем все три вышеописанных свойства у сущности "Мероприятие", и вместо них создаём таблицу "Мероприятие - День, когда оно активно", которая организует связь много-ко-много между сущностями "Мероприятие" и "Дата в календаре". Всё... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: нет Всего: 6 |
Это лишь преобразование входных данных. По сути мы получаем, что на входе у нас есть цифра от 1 до 7, а в каждой сущности есть массив чисел от 1 до 7 и следовательно нужно получить все сущности в массивах которые присутствует входное значение. Т.е. преобразование входных данных - это мишура, основной вопрос остаеться актуальным.
Добавлено через 1 минуту и 31 секунду Akina, Да, именно о таком подходе я подумал с самого начала. Но в таком случае таблица станет достаточно сложной для восприятия. Вы все равно считаете, что оно того стоит? Добавлено через 5 минут и 22 секунды Akina, И вот еще ньсюан Вашего подхода... Допустим у меня есть всего 10 мероприятий длительностью 1 год, происходяших только по будням. На выходе я получу примерно 2500 (10 * 366 * 5/7) записей всего из 10 объектов? |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Для восприятия кем? серверу - сиренево... Скорее да, чем нет. Окончательное решение всё равно принимать не мне. И что? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
А как задан этот атрибут? Akina, мне кажется для решения этой задачи :
Предлагаемый подход Не оправдан, как бы не представлялся этот атрибут. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Эммм... не совсем понял фразу... Мне разворачивание указания дней недели в список конкретных дат кажется более логичным, чем другие подходы. Да, такой подход способен давать странные результаты, если срок окончания не задан или отнесён на конец вселенной - но зато только он позволит вносить исключения типа "если день не попадает на Пасху или Новый год"... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Akina, там же указываются лишь дни недели, как я понял. Т.е. некий график с периодом в семь дней. Определив вхождение даты внутрь диапазона, проверить на вхождение элемента в множество от силы из 7 элементов (хотябы по битовой маске) и все... и не надо огород городить.
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Zloxa, да, СЕЙЧАС исходные данные именно таковы. Но появление как исключений (типа как я указал выше), так и "свободного графика" - на самом деле лишь вопрос времени. Почему бы сразу не делать структуру, способную переварить и эти новшества? тем более что, по заверениям ТС, речь пойдёт о тысячах (ну может десятках тысяч) азписей - мелочь по меркам СУБД...
Да и запросы будут проще и понятнее. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: нет Всего: 6 |
Zloxa,
Можите свое предложение подробние описать? Конкретно, про то как лучше определять вхождение значения в список значений?
Нет, такого изменения исходных данных не предвидится. То, что 2500 записей - это не много, тут все ясно. Но это кол-во из расчета 10 объектов, а в базе их могут быть тысячи в результате таблица индекса будет содержать миллионы записей. СуБД спокойно работают с таблицами в миллион записей при высокой нагрузке? Это сообщение отредактировал(а) BuShaRt - 13.12.2011, 10:47 |
|||
|
||||
Zloxa |
|
||||||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Мои советы в этой теме, увы, могут быть не самыми лучшими. Я совершенно не знаком с MySQL и его спецификой и мои рекомендации могут оказаться сродни рекомендации чесать левое ухо правой рукой. Я многократно уже упрекал себя за то, что пощусь в этой ветке, но порой таки не могу удержаться. Однако в данном, конкретном, случае я не вижу сколь нибудь серьезной угрозы производительности тупой конструкции в лоб, чтобы ее стоило оптимизировать:
С другой стороны, Акина, действительно, отчасти прав. Действительно редких случаях можно пренебречь календарем, и, в большинстве своем, это оптимизации и допущения. На практике же, за частую производятся прееносы дней недели, когда мы, скажем в субботу работаем за понедельник, если на вторник приходится красный день календаря. Добавлено через 6 минут
Да. Миллионы и даже их десятки, это далеко не пугающие объемы. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
||||||
|
|||||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: нет Всего: 6 |
||||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Либо я не понял тебя, либо ты меня. Ну да то не суть. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |