본문 바로가기
MySql

MySQL 테이블에서 시간이 겹치는 지 확인하고 계십니까?

by 베이스 공부 2020. 10. 3.
반응형

다음 필드가있는 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

 

 

반응형

댓글