|
|
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Столкнулся с распространенной, наверное, задачей хранения времени работы заведения и поиска открытых сейчас или в какое-то определенное время. Заведения могут работать по-разному в зависимости от дня недели (возможно также праздничных дней, но это как-то совсем сложно), могут иметь всякие перерывы на обеды и прочие дырки. Что можно почитать по этому поводу? Что спрашивать у гугла? Или может кто-нибудь в двух словах опишет идею? Заранее благодарен. Саша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2011, 18:09 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
А причем тут PostgreSQL ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2011, 10:14 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
Judo, Подозреваю, что это текущий рабочий инструмент. Для других инструментов - не так актуально. В связи с темой приходит на ум только производственный календарь - это по поводу поискать в гугле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2011, 10:32 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
bububuJudo, Подозреваю, что это текущий рабочий инструмент. Для других инструментов - не так актуально. В связи с темой приходит на ум только производственный календарь - это по поводу поискать в гугле. где то тут были правила оформления тем :-))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2011, 14:11 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
Judoгде то тут были правила оформления тем :-))) Я как-то раз решал проблему общими способами, а потом выяснилось, что лучшим решением было субд-зависимым. Может в постгресе есть специальные типы и индексы, пользуясь которыми можно элегантно решить проблему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2011, 14:48 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
ec2Judoгде то тут были правила оформления тем :-))) Я как-то раз решал проблему общими способами, а потом выяснилось, что лучшим решением было субд-зависимым. Может в постгресе есть специальные типы и индексы, пользуясь которыми можно элегантно решить проблему. ну вот я до этого все понимал, ну прям все понимал что написано, а тут бац и ваще как в тумане :-)))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2011, 14:51 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
В 9.0 появился специальный тип индексов что-то с временными промежутками... Курите маны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2011, 18:07 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
ec2, Ваша задача решается просто, если вы соответсвующим образом реализуете свою схему данных, например сделав таблицу в которой указаны интеррвалы работы указанных объектов. Но туманные описания и постановка задачи генерируют еще более туманные ответы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2011, 19:18 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
Big Andyec2, Ваша задача решается просто, если вы соответсвующим образом реализуете свою схему данных, например сделав таблицу в которой указаны интеррвалы работы указанных объектов. Но туманные описания и постановка задачи генерируют еще более туманные ответы Я сделал так: создал таблицу working_days(id, business_id, day_of_week:integer, from:time, to:time) и достаю объекты вот так: Код: plaintext 1. Я почему-то думал, что сформулировал корректно. Извиняюсь. Какие индексы лучше навешать на таблицу working_days? Или вообще все выкинуть и сделать с начала? Или лучше убиться об стену, как некоторые тут втайне желают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2011, 19:24 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
ec2 Я сделал так: создал таблицу working_days(id, business_id, day_of_week:integer, from:time, to:time) и достаю объекты вот так: Код: plaintext 1. и это правильно (с) (как будете вводить ночные/круглосуточные заведения с from_time во вчера, а to_time - в будущую пятницу ? дробить через полночь?) ,но, я думаю, по большому, надо создать еще таблицу исключений (она же, обычно, - праздников и т.п. - в случае "раб-календаря") которая будет безусловно перекрывать таблицу "working_days" для тех дат, которые в ней явно указаны. вместо day_of_week:integer <-> day:date[, + статус ]. (иногда туда автоматом загоняют весь календарь, но это, имхо, лишнее) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2011, 21:34 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
1чайнег (как будете вводить ночные/круглосуточные заведения с from_time во вчера, а to_time - в будущую пятницу ? дробить через полночь?) ,но, я думаю, по большому, надо создать еще таблицу исключений (она же, обычно, - праздников и т.п. - в случае "раб-календаря") которая будет безусловно перекрывать таблицу "working_days" для тех дат, которые в ней явно указаны. вместо day_of_week:integer <-> day:date[, + статус ]. (иногда туда автоматом загоняют весь календарь, но это, имхо, лишнее) Исключения пока не собираемся рассматривать, а ночные придется, наверное, через полночь пропускать. Ну и всякие "до последнего посетителя" здесь никак не учитываются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2011, 21:49 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
а давайте так таблица неработы: business_id foreign key start timestamp duration interval period interval выходные: '2011-01-01', '2 days', '1 week' ночь: '2011-01-01 20:00', '8 hours', '1 day' обед: '2011-01-01 13:00', '2 hours', '1 day' поздний понедельник: '2011-01-03 08:00', '3 hours', '1 week' ранняя пятница: '2011-01-07 19:00', '1 hour', '1 week' 9 мая: '2011-05-09', '1 day', '1 year' сейчас не работают: SELECT business_id ... WHERE ( now() - start ) % period < duration санитарный день в первую среду каждого месяца в такую схему не ложится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2011, 23:05 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
исправление выходные: '2011-01-01', '2 days', '1 week' ночь: '2011-01-01 20:00', '12 hours', '1 day' обед: '2011-01-01 13:00', '2 hours', '1 day' поздний понедельник: '2011-01-03 08:00', '3 hours', '1 week' ранняя пятница: '2011-01-07 19:00', '1 hour', '1 week' 9 мая: '2011-05-09', '1 day', '1 year' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 00:59 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
Это классичская задача учёта рабочего времени и шедуллинга. Упрощённо у нас это реализовано так: id serial obj_id integer, --foreign key. Описывает идентификатор объекта self_fk,-- поле для автореккурсии. Например, идентификатор записи с рабочим временем, которая обозначает, что,н например зависимая запись с временнЫм интервалом и соответствующим tinterval_type есть запись рабочего перерыва для данноо объекта и для данного родительского интервала времени (если хотите, исключение) tinterval_type, --Тип временнОго интервала, как то: (рабочеее время, перерыв, время перекуров, исключения и пр...) tinterval_start timestamp, --дата-время начала интервала /события tinerval_end timestamp --дата-время окончания интервала /события ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 07:23 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
Big AndyЭто классичская задача учёта рабочего времени и шедуллинга. Упрощённо у нас это реализовано так: id serial obj_id integer, --foreign key. Описывает идентификатор объекта self_fk,-- поле для автореккурсии. Например, идентификатор записи с рабочим временем, которая обозначает, что,н например зависимая запись с временнЫм интервалом и соответствующим tinterval_type есть запись рабочего перерыва для данноо объекта и для данного родительского интервала времени (если хотите, исключение) tinterval_type, --Тип временнОго интервала, как то: (рабочеее время, перерыв, время перекуров, исключения и пр...) tinterval_start timestamp, --дата-время начала интервала /события tinerval_end timestamp --дата-время окончания интервала /события Но мне же нужна обобщенная система, не зависящая от конкретного времени. "В любой четверг заведение работает с 9 до 17", а не 12 мая 2011 года работает с 9 до 17. Или я чего-то не понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 09:44 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
По-моему, вам сюда - "проектирование баз данных": http://www.sql.ru/forum/actualtopics.aspx?bid=36 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 10:15 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
Big Andy> Это классичская задача учёта рабочего времени и шедуллинга. да-да, получается похоже на crontab файл таблица неработы: business_id interval_id таблица интервалов: interval_id -- НЕ первичный ключ start interval stop interval period enum('year','month','week','day',..) -- см. date_trunc 'выходные', '5 days', '7 days', 'week' 'вечерняя ночь', '20 hours', '24 hours', 'day' 'утренняя ночь', '0 hours', 8 hours', 'day' 'обед', '13 hours', '15 hours', 'day' 'поздний понедельник', '0 days 8 hours', '0 days 11 hours', 'week' 'ранняя пятница', '4 days 19 hours', '4 days 20 hours', 'week' '9 мая', '4 months 8 days', '4 months 9 days', 'year' 'санитарный день', '0 days', '7 days', 'month' -- в начале месяца, 'санитарный день', '2 days', '3 days', 'week' -- а именно в среду сейчас не работают: SELECT business_id ... WHERE interval_id IN ( SELECT interval_id, bool_and( now() - date_trunc( period, now() ) between start and stop ) as не_работает ... GROUP BY 1 HAVING не_работает = true ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 11:31 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat, Спасибо за отклик! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 11:54 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
ec2, авторВ любой четверг заведение работает с 9 до 17", а не 12 мая 2011 года работает с 9 до 17. Или я чего-то не понимаю? Наверное. НЕ вижу ничего невозможного для реализации вашей тезы на приведённой схеме данных.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 12:34 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
Big Andyec2, авторВ любой четверг заведение работает с 9 до 17", а не 12 мая 2011 года работает с 9 до 17. Или я чего-то не понимаю? Наверное. НЕ вижу ничего невозможного для реализации вашей тезы на приведённой схеме данных.. Я вижу :) Буду думать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 12:35 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
Big Andyid serial obj_id integer, --foreign key. Описывает идентификатор объекта self_fk,-- поле для автореккурсии. Например, идентификатор записи с рабочим временем, которая обозначает, что,н например зависимая запись с временнЫм интервалом и соответствующим tinterval_type есть запись рабочего перерыва для данноо объекта и для данного родительского интервала времени (если хотите, исключение) tinterval_type, --Тип временнОго интервала, как то: (рабочеее время, перерыв, время перекуров, исключения и пр...) tinterval_start timestamp, --дата-время начала интервала /события tinerval_end timestamp --дата-время окончания интервала /события авторВ любой четверг заведение работает с 9 до 17"...... НЕ вижу ничего невозможного для реализации вашей тезы на приведённой схеме данных..может туплю? покажете содержимое таблицы для этого примера и селект-запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 13:40 |
|
||
|
Время работы заведений
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat, В топике я указал, что упрощённая схема данных. Поэтому запрос будет очень простой, например, простите за склероз. select * from shed_target where (tinterval_type.sh_day)=4 and tinterval.start:time>='9:00' and tinterval_end::time<='17:00' Есть (у нас) маленькая хитрость. Поскольку логика переносилась с DB2 5.5, то множество полей есть ссылки на другие структуры БД (такое крюкорукое творчество на тему ORDBMS), имеющие соответсвующий тип. . Модератор: Тема перенесена из форума "PostgreSQL". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2011, 15:10 |
|
||
|
|

start [/forum/topic.php?fid=32&gotonew=1&tid=1542177]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
186ms |
get topic data: |
10ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 232ms |
| total: | 532ms |

| 0 / 0 |
