반응형
다음 필드가있는 MySQL 테이블이 있습니다.
starttime
및 endtime
은 MySQL TIME
필드 ( DATETIME
아님)입니다. 테이블 내의 시간 범위에 겹치는 부분이 있는지 확인하기 위해 테이블을 주기적으로 "스캔"하는 방법이 필요합니다. 10 : 00-11 : 00
의 이벤트와 10 : 30-11 : 30
의 다른 이벤트가있는 경우 시간 겹침이 있음을 알리고 싶습니다. .
정말 멋진 것은 없습니다. 겹침이 있는지 여부를 알고 싶습니다.
이것을 실행하기 위해 PHP를 사용할 것입니다.
해결 방법
이것은 몇 년 전에 답을 찾은 쿼리 패턴입니다.
SELECT *
FROM mytable a
JOIN mytable b on a.starttime <= b.endtime
and a.endtime >= b.starttime
and a.name != b.name; -- ideally, this would compare a "key" column, eg id
"중복"을 찾으려면 기간의 반대 끝을 서로 비교합니다. 엣지 케이스가이 비교로 요약된다는 것을 깨닫기 위해 펜과 종이를 꺼내서 인접한 범위를 그려야했습니다.
행이 겹치는 것을 방지하려면이 쿼리의 변형을 트리거에 넣으십시오.
create trigger mytable_no_overlap
before insert on mytable
for each row
begin
if exists (select * from mytable
where starttime <= new.endtime
and endtime >= new.starttime) then
signal sqlstate '45000' SET MESSAGE_TEXT = 'Overlaps with existing data';
end if;
end;
참조 페이지 https://stackoverflow.com/questions/6571538
반응형
'MySql' 카테고리의 다른 글
MySQL 임시 테이블은 공유 리소스입니까? (0) | 2020.10.03 |
---|---|
MySQL에서 "전체 단어 일치"검색 (0) | 2020.10.03 |
MySQL Apache Derby와 MySQL의 차이점은 무엇입니까 (0) | 2020.10.03 |
MySQL 키워드를 사용하여 PHP mysql 검색 여러 테이블 (0) | 2020.10.03 |
MySQL PHP를 사용하여 mysql 테이블을 .txt 또는 .doc 파일로 내보내기 (0) | 2020.10.03 |
댓글