Нужна помощь по разработке функционала (взгляд пользователя и профи)

Тема в разделе "Базы данных", создана пользователем danneo, 11 апр 2014.

Статус темы:
Закрыта.
Модераторы: latteo
  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.453
    Симпатии:
    113
    Нужно сделать функционал для пользователя, который добавляет инфу о себе - с графиком работы. Например, репетитор, может заниматься только по определенным дням и часам. В день может с утра, а потом после обеда до 17:00. Соответственно, нужно предоставить возможность для выбора рабочие дни (Пн-Вск), а также, с чем проблема и возникла - часы работы.
    Как придумать настройку часов работы по дням недели?
    А самый главный вопрос, нужно ли вообще указывать подробный график, насколько это актуально? Может быть упростить, типа, вечернее, утреннее, дневное время?

    Ну и вопрос для профи... как это дело сохранять в БД (MySQL + php), чтобы потом можно было выводить для гостей, искать по этим данным, редактировать? По часам может быть никто не станет искать, но можно сделать готовые решения для поиска: утро, день, вечер. Или выводить только "будни или выходной".

    Все что я придумал, дак это для каждого дня сделать возможность добавлять на jquery график "С -- По --". И все эти данные закидывать в массив. А в БД сохрнатья все это дело так: в одно поле все часы, а в другое поле дни недели. А потом соединять массивы.
    Еще была идея сделать, как в utorrent, нарисовать кучу квадратиков, а пользователь меняет их цвет. И весь этот массив тоже сохранять.
    Но что-то мне подсказывает, что я занимаюсь ерундой. :hi:
     
  2. Rollo

    Rollo Постоялец

    Регистр.:
    28 сен 2012
    Сообщения:
    53
    Симпатии:
    20
    ..... а почему бы вам не сохранять в поле hour_available типа SET - часы, когда человек доступен?
    т.е. например
    в сет вы кладете (10,11,19,20,21,22) - что обозначает что чел доступен с 10 до 12, потом с 19 до 23

    вариант?
    гуглите в мускуле поле типа SET

    ну и да, по дням недели через еще 1 таблицу по дням недели, и вы совершенно в ажуре
     
    latteo нравится это.
  3. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.453
    Симпатии:
    113
    Посмотрел по типу...
    Несколько уточняющих вопросов:
    1. как быть, если сохранять нужно будет с минутами, хотя бы по пол часа, например, с 12:30 до 15:00 ?
    2. как выводить интервал, точнее, как определить, что тут два интервала?
    3. как пользователь указывает эти интервалы (процесс)?

    На хабре нашел похожий вариант: таблица с интервалами. Сохранять в нее userid, start_int, end_int.
     
    Последнее редактирование: 12 апр 2014
    latteo нравится это.
  4. Rollo

    Rollo Постоялец

    Регистр.:
    28 сен 2012
    Сообщения:
    53
    Симпатии:
    20
    1,2 - вы предполагаете тчо интервал часовой (или получасовой), елси 2е то в базу кладете 900, 930, 1000 - т.е. чел доступн с 9 до 9:30
    3 - это уже юзабилити, тыкает на прямоугольнички с временем и они меняют цвет, например

    насчет таблицы с интервалами хорошее решение кстати тоже. если + 1 таблица вас не пугает - решение очень ОК
     
  5. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.453
    Симпатии:
    113
    ну а что делать с 1000 (10:00)? Я не могу понять, как потом по этим данным искать?
    а что должно пугать?

    придумал способ:
    Создать таблицу: id, id_user, id_day, start, end.
    ИЗ браузера скинуть строку (или массив), разбить его на одиночные интервали и закидывать. Например: в понедельник 2 интервала: 10:00-15:00 и 16:00-22:00
    В таблицу пойдет две записи:
    Вопрос: нормально ли такая таблица? Как осуществлять поиск? Например, нужно найти с 15:00 до 20:00.
    Я так понимаю, что лучше все таки это время переделать в integer без двоеточия или вообще еще в чего. И добавлять двоеточие только при выводе на сайте...
     
  6. Rollo

    Rollo Постоялец

    Регистр.:
    28 сен 2012
    Сообщения:
    53
    Симпатии:
    20
    Да, естественно лучше без двоеточий, вы ж загеморроитесь сравнивать строки

    сравнивате очень просто
    ЕСЛИ
    (старт_интервала<=требуемый_старт) И (завершение_интервала>=требуемое_завершение)
    ТО
    это как раз то что вы искали ;)
     
    danneo нравится это.
  7. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.728
    Симпатии:
    2.105
    а не проще ли иметь два поля, количество секунд с начала суток как интеджер, начало и окончание интервала - два поля. потом ищите как душе угодно
    10 часов - значение 36000, можно упростить использовов минуты как минимальное значение, тогда начало интервала будет 600 и окончание (скажем 10:15) 615

    можно сделать хитрее, чтоб убить двух зайцев представить сутки в виде битов, где каждый бит это следующий час
    тогда можна в одном поле хранить всю карту доступности человека
     
    danneo нравится это.
  8. Flayer1993

    Flayer1993 Создатель

    Регистр.:
    31 мар 2014
    Сообщения:
    13
    Симпатии:
    1
    ИМХО в базе вообще все держать в timestamp. Хранить информацию "старта" и "конца". Только эту инфу хранить для каждого дня недели отдельно. Удобно работать с данными будет :)
     
  9. Rollo

    Rollo Постоялец

    Регистр.:
    28 сен 2012
    Сообщения:
    53
    Симпатии:
    20
    Имхо неудобно это, таймстэмп содержит в себе дату - какой в ней смысл, когда мы о часовых интервалах?

    например, как бы вы с таким полем делали бы выборку подходящего интервала?
     
  10. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.453
    Симпатии:
    113
    возникли вопросы:
    в базе лежит интервал и его данные: один интервал - одна запись. У пользователя при редактировании выводится несколько интервалов, например, 9 штук. Он их отредактировал: какие-то удалил, какие-то оставил. Стало, например, 4. Два из них не изменились.
    Вопрос 1: как делать update?
    Вижу 2-а варианта:
    1. Удалить все его старые интервалы. Потом сделать insert новых интервалов. Вроде как более простой по реализации.
    2. Перед обновлением сделать выборку всех его интервалов. Если у существующего интервала поменялись данные, то делаем update. Если интервал новый, то создаем его (insert).

    Вопрос 2:
    Как обезопасить или оптимизировать запрос при множественных insert, в плане нагрузки? Ведь пользователь может много интервалов добавить. И всех их сразу выполнять?
     
Статус темы:
Закрыта.