У меня есть определенное событие в календаре, присвоенном storeID, который имеет sdate
(ShowDate) и hdate
(HideDate). Теперь для каждого нового события с этим идентификатором storeID мне нужно убедиться, что нет совпадения с существующим дате. Имеет ли это смысл? Как мне это сделать? Я читал о вещах, но не мог понять, как «вставлять, если не перекрывать».Предотвращение создания перекрывающихся диапазонов дат
ответ
В общем, если у вас есть два диапазона с S1..E1 и S2..E2 как начальными и конечными значениями диапазонов, то у Вас есть перекрытие, если:
- S1 < E2 и
- S2 < Е1
Это является симметричным, что хорошо (и обнадеживающим). Вам нужно будет тщательно решить, должны ли эти «менее» операции быть «меньше или равно»; оба могут иметь смысл, в зависимости от того, как вы храните свои данные (открытые, закрытые или полуоткрытые или открытые и закрытые диапазоны и т. д.). Вы можете увидеть diagram возможностей по вопросу 'Determine whether two date ranges overlap'.
В вашем контексте «ShowDate» соответствует дате начала, а «HideDate» соответствует дате окончания.
Звучит так же, как если бы вы тоже делали 'conditional insert'. В этом случае, при условии, что ваш StoreID 1001, то ShowDate является 2012-03-21 и HideDate является 2012-03-28, то вы можете написать:
INSERT INTO Calendar(StoreID, ShowDate, HideDate, ...)
SELECT 1001, '2012-03-21', '2012-03-28', ...
FROM Dual
WHERE NOT EXISTS(SELECT * FROM Calendar C2
WHERE C2.StoreID = 1001
AND C2.ShowDate < '2012-03-28'
AND '2012-03-21' < C2.HideDate
);
Значения в списке выбора являются те, вы хотите добавить в таблицу календаря. Суб-выбор означает, что вы получаете либо 0 строк (потому что есть перекрытие), либо 1 строка (потому что нет перекрытия) с данными для вашего нового значения.
Почему 'SELECT ... FROM Dual' вместо кортежа' (1001, '2012-03-21', '2012-03-28', ...) '? – Air
Диалект SQL (или стандарт, которому соответствует СУБД). Некоторые СУБД не поддерживают обозначение. –
- 1. Сопоставление перекрывающихся диапазонов дат
- 2. Найти число совпадающих, перекрывающихся диапазонов дат
- 3. Подсчитать порядок перекрывающихся диапазонов дат в SQL
- 4. номеру строки перекрывающихся дат
- 5. Выбор перекрывающихся диапазонов времени
- 6. найти не перекрывающихся диапазонов
- 7. Поиск минимальной цены для перекрывающихся диапазонов дат - алгоритм C#
- 8. Устранение приоритетных перекрывающихся диапазонов в SQL Server
- 9. C#: Алгоритм для создания случайных равномерно распределенных потенциально перекрывающихся диапазонов
- 10. Обнаружение перекрывающихся диапазонов в Рубине
- 11. Подведение «замаскированных» диапазонов дат-времени с использованием перекрывающихся дат в SQL Server
- 12. Число перекрывающихся дат (ы)
- 13. расщепления перекрывающихся дат в SQL
- 14. Предотвращение перекрытия диапазонов чисел
- 15. Solr выборки диапазонов дат
- 16. Перекрестный продукт диапазонов дат
- 17. Создание таблицы диапазонов дат
- 18. Приоритет совпадений диапазонов дат
- 19. Сравнение диапазонов дат
- 20. Подсчет диапазонов дат
- 21. группы смежных диапазонов дат
- 22. Предотвращение вытащили круг из перекрывающихся
- 23. Предотвращение неподвижного колонтитула от перекрывающихся
- 24. PostgreSQL запроса для определения времени перекрывающихся диапазонов
- 25. Удаление полностью перекрывающихся интервалов или диапазонов
- 26. найти индексы перекрывающихся диапазонов в R
- 27. Самый эффективный способ группировки перекрывающихся диапазонов?
- 28. Запрос двух таблиц для перекрывающихся диапазонов
- 29. Объединить dataframes на основе перекрывающихся геномных диапазонов
- 30. Слияние перекрывающихся диапазонов в массивах PHP?
Добро пожаловать в StackOverflow. Какой «календарь»? Какой язык? Какая база данных? что ты уже испробовал? Вы не предоставляете какую-либо информацию здесь, которую мы можем использовать, чтобы попытаться помочь вам. Измените свой вопрос и укажите более подробную информацию. Боюсь, если вы этого не сделаете, этот вопрос в конечном итоге будет закрыт как «не настоящий вопрос». –
Извините, PHP и MySql - я пробовал играть с BETWEEN, но на самом деле не получил этого, также, могу ли я использовать между php? – cerr