+ Ответить в теме
Показано с 1 по 8 из 8

Тема: запись к врачу

  1. #1
    dummy ЕвгенийЧерепанов is on a distinguished road
    Регистрация
    11.12.2017
    Сообщений
    4
    Вес репутации
    0

    По умолчанию запись к врачу

    нужно разработать календарь записи к врачу, время процедуры может быть разным.
    на сайте нужно выводить свободные интервалы
    как проще сделать базу? можно ли выводить не занятые ячейки.
    структура таблицы:
    id
    time_begin
    time_end
    id_clients

    не могу понять
    в sql нужно на следующий день заполнить предварительно с минимальным интервалом, например по 5 минут
    т.е. 8:00 - 8:05
    8:05-8:10 и т.д. до 24:00

    или можно выводить незаполненные ???

  2. По умолчанию

     
    Хотите избавиться от рекламы? Зарегистрируйтесь
  3. #2
    Moderator Куратор
    system architect
    Absurd is on a distinguished road
    Регистрация
    26.02.2004
    Адрес
    Pietari, Venäjä
    Возраст
    38
    Сообщений
    1,200
    Вес репутации
    16

    По умолчанию Re: запись к врачу

    Цитата Сообщение от ЕвгенийЧерепанов Посмотреть сообщение
    нужно разработать календарь записи к врачу, время процедуры может быть разным.
    на сайте нужно выводить свободные интервалы
    как проще сделать базу? можно ли выводить не занятые ячейки.
    структура таблицы:
    id
    time_begin
    time_end
    id_clients

    не могу понять
    в sql нужно на следующий день заполнить предварительно с минимальным интервалом, например по 5 минут
    т.е. 8:00 - 8:05
    8:05-8:10 и т.д. до 24:00

    или можно выводить незаполненные ???
    В запросе свалить все time_begin и time_end в одну колонку (UNION ALL) и отсортировать. Очевидно что нечетные записи будут началом очередного интервала, а четные - концом этого интервала. Все что между интервалами - свободное время. Надо будет еще констрейнты какие-то ввести чтобы они не перекрывались и чтобы time_begin был всегда меньше time_end.
    2B OR NOT(2B) = FF

  4. #3
    dummy ЕвгенийЧерепанов is on a distinguished road
    Регистрация
    11.12.2017
    Сообщений
    4
    Вес репутации
    0

    По умолчанию Re: запись к врачу

    Цитата Сообщение от Absurd Посмотреть сообщение
    В запросе свалить все time_begin и time_end в одну колонку (UNION ALL) и отсортировать. Очевидно что нечетные записи будут началом очередного интервала, а четные - концом этого интервала. Все что между интервалами - свободное время. Надо будет еще констрейнты какие-то ввести чтобы они не перекрывались и чтобы time_begin был всегда меньше time_end.
    Спасибо за ответ.

    я единственное не пойму тогда
    нужно сначала автозаполнять интервалы на день (то есть на день делать как то множественной вставкой) потому что для клиента нужно выводить временные промежутки на которые он может сам записаться

    просто по другому я не понимаю как создать активные ссылки на конкретные ячейки времени которые будут доступны для записи

  5. #4
    Moderator Куратор
    system architect
    Absurd is on a distinguished road
    Регистрация
    26.02.2004
    Адрес
    Pietari, Venäjä
    Возраст
    38
    Сообщений
    1,200
    Вес репутации
    16

    По умолчанию Re: запись к врачу

    Цитата Сообщение от ЕвгенийЧерепанов Посмотреть сообщение
    Спасибо за ответ.

    я единственное не пойму тогда
    нужно сначала автозаполнять интервалы на день (то есть на день делать как то множественной вставкой) потому что для клиента нужно выводить временные промежутки на которые он может сам записаться

    просто по другому я не понимаю как создать активные ссылки на конкретные ячейки времени которые будут доступны для записи
    Не понимаю зачем вам заполнять чего-то. Допустим, временные окна для приема в день - по 5 минут.

    Код :
    1. table time_window(id: autoincrement, begin_time, end_time)
    2. insert into time_window(begin_time, end_time) values(8:00, 8:05) ... insert into time_window(begin_time, end_time) values(15:55, 16:00)
    3.  
    4. table appointment(id: autoincrement, date, time_window_id: foreign key, patient_id: foreign key)
    5.  
    6. select * from time_window where not exists(select 1 from appointment where time_window.id = appointment.time_window_id and appointment.date = :param_date)

    Не уверен что код правильный, но я уверен что вы сами разберетесь как работает exists/not exists
    Последний раз редактировалось Absurd; 11.12.2017 в 17:54. Причина: Ошибка в SQL
    2B OR NOT(2B) = FF

  6. #5
    dummy ЕвгенийЧерепанов is on a distinguished road
    Регистрация
    11.12.2017
    Сообщений
    4
    Вес репутации
    0

    По умолчанию Re: запись к врачу

    Код :
    1. Не понимаю зачем вам заполнять чего-то. Допустим, временные окна для приема в день - по 5 минут.
    если бы...
    проблема в том что обследования разные по времени, одни по 20 минут, другие 30, есть по 45 и 60, и даже 80 минут. задача в том чтобы клиенту предлагать время не занятое. Я вот и думал сделать по 5 минут.
    Если обследование занимает 20 то 4 записи в базе делать с каким либо номером, который приводит на список услуг по данному клиенту

  7. #6
    Moderator Куратор
    system architect
    Absurd is on a distinguished road
    Регистрация
    26.02.2004
    Адрес
    Pietari, Venäjä
    Возраст
    38
    Сообщений
    1,200
    Вес репутации
    16

    По умолчанию Re: запись к врачу

    Цитата Сообщение от ЕвгенийЧерепанов Посмотреть сообщение
    Код :
    1. Не понимаю зачем вам заполнять чего-то. Допустим, временные окна для приема в день - по 5 минут.
    если бы...
    проблема в том что обследования разные по времени, одни по 20 минут, другие 30, есть по 45 и 60, и даже 80 минут. задача в том чтобы клиенту предлагать время не занятое. Я вот и думал сделать по 5 минут.
    Если обследование занимает 20 то 4 записи в базе делать с каким либо номером, который приводит на список услуг по данному клиенту
    ну да, все так и делают.

    Код :
    1. appointment(id, date, patient_id)-1..n->appontment_timeframe(appointment_id, timeframe 1 ... 96 /* 8:00 - 15:55 */)

    Для таблицы appontment_timeframe лучше указать композитный primary key из обоих колонок. Для Оракла также пометить как index organized table. Свободное время можно получить через NOT EXISTS() запрос, как я писал ранее.
    Последний раз редактировалось Absurd; 11.12.2017 в 22:10.
    2B OR NOT(2B) = FF

  8. #7
    dummy ЕвгенийЧерепанов is on a distinguished road
    Регистрация
    11.12.2017
    Сообщений
    4
    Вес репутации
    0

    По умолчанию Re: запись к врачу

    а как тогда я буду пользователю выводить информацию?
    у него должны быть кнопки из свободного времени. количество кнопок определяется продолжительностью обследования.

    приведу пример,
    Иванов Иван хочет записаться на обследование 1 (продолжительность 20 минут)
    Петров Петр хочет записаться на обследование 2 (продолжительность 45 минут)
    Сидоров Виктор хочет записаться на обследование 3 (продолжительность 30 минут)

    так вот

    когда клиент выбирает обследование, то ему нужно показывать свободные интервалы (для каждого клиента они свои), ведь если у нас есть в БД записи например такие:

    08:00 - 08:20,
    08:20 - 08:40,
    09:00 - 09:45,
    09:50 - 10:10,
    12:00 - 12:30,
    12:30 - 13:15
    14:00 - 14:20

    то для первого клиента доступны должны быть окошки в виде кнопок:

    08:40 - 09:00
    10:10 - 10:30
    10:30 - 10:50
    10:50 - 11:10
    11:10 - 11:30
    11:30 - 11:50
    13:15 - 13:35
    13:35 - 13:55

    для второго:
    10:10 - 10:55
    10:55 - 11:40
    13:15 - 14:00

    для третьего:
    10:10 - 10:40
    10:40 - 11:10
    11:10 - 11:40
    13:15 - 13:45

    я почему то не могу понять как при вашем способе это реализовать.

    вероятно не хватает опыта с СУБД...

  9. #8
    Moderator Куратор
    system architect
    Absurd is on a distinguished road
    Регистрация
    26.02.2004
    Адрес
    Pietari, Venäjä
    Возраст
    38
    Сообщений
    1,200
    Вес репутации
    16

    По умолчанию Re: запись к врачу

    Цитата Сообщение от ЕвгенийЧерепанов Посмотреть сообщение
    а как тогда я буду пользователю выводить информацию?
    я почему то не могу понять как при вашем способе это реализовать.

    вероятно не хватает опыта с СУБД...
    Проще по моему сделать это хранимой процедурой через одну или две временные таблицы. В одну выфечить все занятые интервалы, в другую - все не занятые. Потом заджоинить их друг на друга и сгруппировать по максимальному времени незанятого таймфрейма, который меньше занятого. Либо просто пройтись циклом по курсору и склеить смежные интервалы. Можно и программой их склеить если у вас какой-нибудь кастрированный MySQL и нет хранимых процедур. Единым запросом я бы заморачивался это сделать разве что только в Оракле при помощи ключевого слова OVER.
    2B OR NOT(2B) = FF

+ Ответить в теме

Похожие темы

  1. запись на CD
    подскажите, как записывать из моей программы на CD? спасибо
    от Dim...ON в разделе C и C++
  2. Помогите врачу! Импорт данных в Access
    Глубокоуважаемые программисты! Помогите, плиз, врачу! Создал базу данных в Аксесе, в нее вносятся вручную данные с аппарата, измеряющего параметры...
    от Laboratory в разделе MS Office и VB(A).
  3. запись в txt файл
    Здравствуйте. Такая проблема: Имеется диалог, а на нём конпка и EditBox. Я хочу чтобы при нажатии на кнопку, текст, введённый в EdiBox e...
    от pominub в разделе C и C++
  4. запись в реестр (MFC)
    опишите пожалуйста тока подробно запись в реестр!!! и если можно на примере не просто одни параметры!!!!
    от NeT в разделе C и C++
  5. Запись на Web сервер
    Привет всем! Господа программисты, кто подскажет, как записать имеющийся в наличии файл на Web сервер?
    от Anonymous в разделе Java

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения