У меня есть 2 столбца: start_time и end_time, которые выглядят так: "00:00:05", "00:00:10" (время mysql).
Мой вопрос следует. Как я могу проверить, что одна запись не перекрывает какую-либо другую запись уже в таблице, так что она уникальна, например:
"00:00:10", "00:00:20" перекрывается "00:00:05", "00:00:15"
Спасибо
логически
В SQL я бы сформулировал
SELECT count(*) FROM Tab as T WHERE
:param_start BETWEEN T.start_time AND T.end_time OR
:param_end BETWEEN T.start_time AND T.end_time OR
(:param_start <= T.start_time AND
:param_end >= T.end_time
)
если счетчик < > 0, у вас есть перекрытие
Я написал драгоценный камень, который поможет вам решить эту проблему.
https://github.com/robinbortlik/validates_overlap
В readme приведен пример использования. Но в это время это только для Rails 3.
веселит
Робин Бортлик
select start_time, end_time
from tbl
where start_time < "00:00:20"
and "00:00:10" < end_time
limit 1;
Примечания:
Limit 1
используется для быстрого возврата результата без необходимости поиска/подсчета всех перекрытийЛюбая запись, поступающая в базу данных, по своей природе будет уникальной. Если вы пытаетесь проверить уникальные атрибуты, например "login", вы должны добавить строку "validates: login,: uniqueness = > true" модели, но также и в файл миграции, вам нужно добавить следующее line 't.string: login,: unique = > true'... Это предотвращает любое перекрытие
веселит
Пол