아직 쿼리가 미숙해서 간단해보이는것도 마냥 어렵기만 하고 너무 답답하네요...
고수분들이 많다고 들어 글하나 올립니다.
mysql입니다.
*lecture*
+------------+-------------------+----------------+--------------+---------------+-------------------+--------------+
|lecture_id| lecture_name |lecture_credit|lecture_type|lecture_point|lecture_professor| lecture_info |
+------------+-------------------+----------------+--------------+---------------+-------------------+--------------+
| 1 | 컴퓨터개론1 | 3 | internet | 0 | 김교수 | 전공 |
| 2 | 컴퓨터개론2 | 3 | internet | 0 | 김교수 | 전공 |
| 3 | 컴퓨터개론3 | 3 | internet | 0 | 김교수 | 전공 |
| 4 | 컴퓨터개론4 | 3 | internet | 0 | 김교수 | 전공 |
| 5 | 컴퓨터개론5 | 3 | internet | 0 | 김교수 | 전공 |
| 6 | 컴퓨터개론6 | 3 | internet | 0 | 김교수 | 전공 |
| 7 | 컴퓨터개론7 | 3 | internet | 0 | 김교수 | 전공 |
| 8 | 컴퓨터개론8 | 3 | internet | 0 | 김교수 | 전공 |
| 9 | 컴퓨터개론9 | 3 | internet | 0 | 김교수 | 전공 |
| 10 | 컴퓨터개론10 | 3 | internet | 0 | 김교수 | 전공 |
+------------+-------------------+----------------+--------------+---------------+-------------------+--------------+
*timetable*
+--------------+------------+-------------+------------+----------+
| timetable_id | lecture_id | lecture_day | start_time | end_time |
+--------------+------------+-------------+------------+----------+
| 11 | 1 | 월 | 09:00:00 | 10:30:00 |
| 12 | 1 | 수 | 10:30:00 | 12:00:00 |
| 13 | 2 | 화 | 10:30:00 | 12:00:00 |
| 14 | 2 | 목 | 09:00:00 | 10:30:00 |
| 15 | 3 | 금 | 09:00:00 | 12:00:00 |
| 16 | 4 | 금 | 12:00:00 | 15:00:00 |
| 17 | 5 | 월 | 12:00:00 | 13:00:00 |
| 18 | 5 | 수 | 13:00:00 | 14:00:00 |
| 19 | 6 | 화 | 15:00:00 | 16:30:00 |
| 20 | 6 | 목 | 16:30:00 | 18:00:00 |
| 21 | 7 | 목 | 15:00:00 | 18:00:00 |
| 22 | 8 | 화 | 15:00:00 | 18:00:00 |
| 23 | 9 | 화 | 12:00:00 | 18:00:00 |
| 24 | 10 | 월 | 09:00:00 | 12:00:00 |
+--------------+------------+-------------+------------+----------+
*user_timetable*
+-------------------+------------+----------+
| user_timetable_id | lecture_id | user_id |
+-------------------+------------+----------+
| 4 | 1 | 12345678 |
| 5 | 5 | 12345678 |
| 6 | 9 | 12345678 |
+-------------------+------------+----------+
lecture는 모든강의에 대한 정보입니다.
timetable는 모든강의에 대한 시간표입니다.
user_timetable은 유저가 선택한 강의 입니다.
여기서 유저가 선택한 강의중 시간표가 겹치지 않는 강의를 출력하는 쿼리를 짜고있습니다.
BETWEEN을 쓰려고하니 잘안되고.. 서브쿼리로 제가선택한시간과 모든강의를 비교하자니
1row가 아니라서 출력을 할 수가 없습니다..
어떻게 짜야 할까요?
강의시간을 start_time과end_time로 나누지 않고 time으로 해서 1a,1b,2a이런식으로 30분단위로 끊어서
해결해야 할까요??
현재
select *
from timetable tt
where (
select count(*)
from user_timetable u, timetable t
where u.lecture_id = t.lecture_id
and tt.lecture_day = t.lecture_day
and ((tt.start_time <= t.start_time) and (tt.end_time <= t.start_time) or(tt.start_time >= t.end_time) and (tt.end_time >= t.end_time))) = 0 ;
이렇게 전체강의중 시작시간과 끝시간이 유저가 선택한 강의의 시작시간보다 작으면 유저가 선택한 강의의 이전의 수강가능한 강의
마찬가지로 시작시간과 끝시간이 유저가 선택한 강의의 end_time보다 크면 유저가 선택한 강의 이후의 수강가능한 강의로 출력하려는데...
서브쿼리쪽에서 tt.lecture_day = t.lecture_day로 하니 요일마다 비교를해서 조금 문제가 생기는 것 같습니다..
조언을 구합니다