Подтвердить что ты не робот

SQL для открытия часов

В моей базе данных магазинов мне нужно иметь часы работы. У вас есть идея, как я могу реализовать это в своем дБ?

Часы работы с понедельника по воскресенье, каждый день может иметь 2 окна открытия (ex 09: 00-12: 00, 16: 00-19: 00)

4b9b3361

Ответ 1

создайте другую таблицу, назовите ее schedules, добавьте внешний ключ в первичный ключ таблицы shops, поле Day of week, time_open, time_closed. Данные должны выглядеть примерно так:

shop_id     day_of_week      time_open        time_closed
1           1                09:00            12:00
1           1                16:00            19:00
1           2                09:00            12:00
1           2                16:00            19:00
1           3                09:00            12:00
1           3                16:00            19:00
1           6                10:00            14:00
2           1                09:00            12:00
2           1                13:00            18:00

Это даст вам возможность строить любые графики, с таким количеством окон, сколько вы хотите, с каким количеством исключений вам нужно. Он универсален, ограничивается только тем, что он ожидает, что недели будут одинаковыми. Никакие праздники не учитываются, а также нечетные/четные графики, которые кто-то может использовать.

Edit:
С вопросом Жюльена, о рабочем времени ночного бизнеса, мне пришло в голову, что предыдущее решение далеко не лучшее. Вы не можете открыть бар в 20:00, закрыть в 06:00 и сравнить, если текущее время (02:45) находится внутри этого интервала, потому что его не будет. Поэтому было бы удобнее регистрировать не время закрытия, а общее рабочее время, в удобной единице измерения (например, минуты).

shop_id     day_of_week      time_open        working_time
1           1                09:00            180
1           1                16:00            180
1           2                09:00            180
1           2                16:00            180
1           3                09:00            180
1           3                16:00            180
1           6                10:00            240
2           1                09:00            180
2           1                13:00            300

Ответ 2

Какой тип базы данных вы используете? Если он mysql, поместите в поле типа "время". Затем вы можете передать это время и выполнять базовые манипуляции с данными sql на них. Весь этот пост предполагает mysql.

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

Если существует несколько хранилищ, создайте таблицу под названием "times" и таблицу "магазины". В таблице времени столбцы могут быть "открытыми" и "закрытыми" с идентификатором "store_id". Таблице магазинов также нужен идентификатор. Затем вы можете просто сказать:

"SELECT open, close FROM times WHERE store_id=x"

Это даст вам ВСЕ диапазоны времени, связанные с конкретным хранилищем.