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

Статус
В этой теме нельзя размещать новые ответы.

danneo

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

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

Все что я придумал, дак это для каждого дня сделать возможность добавлять на jquery график "С -- По --". И все эти данные закидывать в массив. А в БД сохрнатья все это дело так: в одно поле все часы, а в другое поле дни недели. А потом соединять массивы.
Еще была идея сделать, как в utorrent, нарисовать кучу квадратиков, а пользователь меняет их цвет. И весь этот массив тоже сохранять.
Но что-то мне подсказывает, что я занимаюсь ерундой. :hi:
 
..... а почему бы вам не сохранять в поле hour_available типа SET - часы, когда человек доступен?
т.е. например
в сет вы кладете (10,11,19,20,21,22) - что обозначает что чел доступен с 10 до 12, потом с 19 до 23

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

ну и да, по дням недели через еще 1 таблицу по дням недели, и вы совершенно в ажуре
 
..... а почему бы вам не сохранять в поле hour_available типа SET - часы, когда человек доступен?
т.е. например
в сет вы кладете (10,11,19,20,21,22) - что обозначает что чел доступен с 10 до 12, потом с 19 до 23
вариант?
Посмотрел по типу...
Несколько уточняющих вопросов:
1. как быть, если сохранять нужно будет с минутами, хотя бы по пол часа, например, с 12:30 до 15:00 ?
2. как выводить интервал, точнее, как определить, что тут два интервала?
3. как пользователь указывает эти интервалы (процесс)?

На хабре нашел похожий вариант: таблица с интервалами. Сохранять в нее userid, start_int, end_int.
 
Последнее редактирование:
Посмотрел по типу...
Несколько уточняющих вопросов:
1. как быть, если сохранять нужно будет с минутами, хотя бы по пол часа, например, с 12:30 до 15:00 ?
2. как выводить интервал, точнее, как определить, что тут два интервала?
3. как пользователь указывает эти интервалы (процесс)?

На хабре нашел похожий вариант: таблица с интервалами. Сохранять в нее userid, start_int, end_int.

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

насчет таблицы с интервалами хорошее решение кстати тоже. если + 1 таблица вас не пугает - решение очень ОК
 
1,2 - вы предполагаете тчо интервал часовой (или получасовой), елси 2е то в базу кладете 900, 930, 1000 - т.е. чел доступн с 9 до 9:30
3 - это уже юзабилити, тыкает на прямоугольнички с временем и они меняют цвет, например
ну а что делать с 1000 (10:00)? Я не могу понять, как потом по этим данным искать?
насчет таблицы с интервалами хорошее решение кстати тоже. если + 1 таблица вас не пугает - решение очень ОК
а что должно пугать?

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

сравнивате очень просто
ЕСЛИ
(старт_интервала<=требуемый_старт) И (завершение_интервала>=требуемое_завершение)
ТО
это как раз то что вы искали ;)
 
а не проще ли иметь два поля, количество секунд с начала суток как интеджер, начало и окончание интервала - два поля. потом ищите как душе угодно
10 часов - значение 36000, можно упростить использовов минуты как минимальное значение, тогда начало интервала будет 600 и окончание (скажем 10:15) 615

можно сделать хитрее, чтоб убить двух зайцев представить сутки в виде битов, где каждый бит это следующий час
тогда можна в одном поле хранить всю карту доступности человека
 
ИМХО в базе вообще все держать в timestamp. Хранить информацию "старта" и "конца". Только эту инфу хранить для каждого дня недели отдельно. Удобно работать с данными будет :)
 
ИМХО в базе вообще все держать в timestamp. Хранить информацию "старта" и "конца". Только эту инфу хранить для каждого дня недели отдельно. Удобно работать с данными будет :)
Имхо неудобно это, таймстэмп содержит в себе дату - какой в ней смысл, когда мы о часовых интервалах?

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

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