Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проверить на все диапазоны времени / 10 сообщений из 10, страница 1 из 1
07.06.2019, 10:19
    #39823886
motoroller1983
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить на все диапазоны времени
Добрый день, есть такая задачка почему-то не получается решить:

простая табличка:

users:
-------
id - int
user: int
start: datetime
end: datetime

к примеру пру записей:

id: 1
user: 131
start: 2019-06-03 09:00:00
end: 2019-06-03 19:00:00

id: 2
user: 131
start: 2019-06-03 20:00:00
end: 2019-06-03 22:00:00

При добавлении новой записи, к примеру такой:
id: 3
user: 131
start: 2019-06-03 19:30:00
end: 2019-06-03 20:30:00

Мы должны проверить, что данное время не занято, нашем случае новая запись не должна добавится, так как время занято
...
Рейтинг: 0 / 0
07.06.2019, 12:09
    #39823959
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить на все диапазоны времени
motoroller1983Мы должны проверить, что данное время не занято, нашем случае новая запись не должна добавится, так как время занятоТриггером хотите сделать? ну так не вопрос - пишите BEFORE INSERT триггер, в нём проверяйте, что нет пересечений (количество пересечений с данными из NEW равно нулю), и при несоответствии генерите ошибку дублирования.
...
Рейтинг: 0 / 0
07.06.2019, 12:47
    #39823988
motoroller1983
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить на все диапазоны времени
Akina,

Вопрос, не про триггер, а как сделать проверку на пересечение, вот это мне не совсем не совсем понятно
...
Рейтинг: 0 / 0
07.06.2019, 14:21
    #39824053
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить на все диапазоны времени
motoroller1983Akina,

Вопрос, не про триггер, а как сделать проверку на пересечение, вот это мне не совсем не совсем понятнотакие вопросы не на форуме по программированию нужно задавать, а в школьном форуме по геометрии, 7-й класс, вторая четверть.

Именно тогда детям объясняют, что два отрезка имеют одну и более общих точек, если каждое из их кончал не меньше каждого из начал.
...
Рейтинг: 0 / 0
07.06.2019, 14:41
    #39824071
Проверить на все диапазоны времени
Щукина Анна,

Ну вот если сравнивать чтобы начало времени было меньше, то это срабатывает, когда есть только одна запись, но когда записей несколько ваш вариант уже не работает, потому что будет запись которая уже раньше.
...
Рейтинг: 0 / 0
07.06.2019, 15:00
    #39824086
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить на все диапазоны времени
Питерский11когда записей несколько ваш вариант уже не работает, потому что будет запись которая уже раньше.Фигню говорите, аднака... всё прекрасно работает.
...
Рейтинг: 0 / 0
07.06.2019, 15:08
    #39824100
Проверить на все диапазоны времени
Akina,

ID USER OFFICE start end
3 143 2 2019-06-03 10:00:00 2019-06-03 20:00:00
4 143 11 2019-06-03 09:20:00 2019-06-03 09:30:00

Добавив первую, естественно вопросов нет, добавив вторую тое проблем нет, а вот теперь редактируя первую снова, данная проверрка не проходит

SELECT COUNT(*) AS `numrows` FROM `schedule` WHERE `user` = '143' AND `office` != '2' AND DATE(start) = '2019-06-03' AND ( `start` <= '2019-06-03 10:00:00' OR `start` <= '2019-06-03 20:00:00' )
...
Рейтинг: 0 / 0
07.06.2019, 15:36
    #39824120
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить на все диапазоны времени
Питерский11редактируя первую снова, данная проверрка не проходит
Сперва шла речь о добавлении новой записи и проверке пересечения с существующей. При чём тут редактирование?
При редактировании нужно ещё смотреть, не является ли редактируемая и проверяемая одной и той же записью...
...
Рейтинг: 0 / 0
07.06.2019, 21:38
    #39824320
motoroller1983
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить на все диапазоны времени
Akina,

Задача перед любым действием (добавление, редактирование)
проверять не попадает ли новая запись в диапазон текущих, то есть я делаю отдельный запрос, а потом на его результате либо выдаю ошибку либо выполняю действие, собственно нужна помощь в составлении запроса, который могу бы корректно проверить есть пересечение или нет.
...
Рейтинг: 0 / 0
10.06.2019, 07:51
    #39824747
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить на все диапазоны времени
motoroller1983Задача перед любым действием (добавление, редактирование)Ну будет два триггера а не один, делов-то... к тому же оба могут вызывать одну и ту же хранимую процедуру.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проверить на все диапазоны времени / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]