2015-01-30 2 views
-2

두 테이블 : roomsscheduled이 있습니다. 예정 테이블에는 begin_time, end_timeroom_id이 있으며 객실 예약시 표시됩니다. 객실 - 테이블에는 모든 객실에 id의 항목이 있습니다.두 번째 테이블에 조건이있는 SQL 쿼리

begin_time

end_time 만 객실은 11

까지 9에서 예약되었음을 나타냅니다 예를 들어 '9'와 '11', 그래서 객실의 목록을 표시하려면, 시간을 포함하는 현재 사용할 수 있습니다. 이렇게하려면 현재 시간에 scheduled에 항목이 없다는 조건에서 rooms 테이블의 모든 객실 ID를 선택하는 쿼리가 필요합니다. 따라서 현재 시간은 begin_timeend_time 사이에 존재하지 않습니다.

나는 다음과 같은 시도 :

SELECT DISTINCT id , room_nr FROM rooms WHERE NOT EXISTS(SELECT room_id FROM scheduled WHERE rooms.id = scheduled.room_id AND date = CURDATE() AND HOUR(CURDATE()) NOT BETWEEN `begin_time` AND `end_time`)

을하지만 그것은 단지 id 현재 날짜를 scheduled 기존되지 않은 객실을 보여줍니다 작동하지 않습니다 - 시간 조건없이합니다. 나는 또한 조인 (조인)으로 뭔가를 시도했지만 실제로 이해하지는 못합니다. 설명 된 조건에서 rooms 테이블에서 id을 반환하는 쿼리를 만들려면 어떻게해야합니까?


UPDATE : http://sqlfiddle.com/#!2/ecd82c

+1

되고 구문 오류 내가이 MySQLFiddle에서 데이터베이스를 사례? – potashin

+0

문제는 DATE() 함수라고 생각합니다. 나는 당신이 CURDATE()를 원했던 것 같아요. http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date – emustac

+0

@notulysses 구문 오류 :'''SQLSTATE [42000] : 구문 오류 또는 액세스 위반 : 1064 SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 매뉴얼에서 올바른 구문을 찾아서'(와) HOUR (CURDATE()) '사이에'begin_time'과'end_time'을 12 행에'''사용하십시오. 나는'CURDATE()'를 시도했으나 불행히도이 문제를 해결하지 못했다. – BasC

답변

0

보십시오 다음 SQL 쿼리 :

SELECT DISTINCT id 
, room_nr 
FROM rooms 
WHERE NOT EXISTS(SELECT room_id 
    FROM scheduled 
    WHERE rooms.id = scheduled.room_id 
    AND date = CURDATE() 
    AND HOUR(CURTIME()) NOT BETWEEN `begin_time` AND `end_time`) 
+0

감사합니다.이 쿼리는 구문 오류가 아니고 출력을 제공합니다. 나는 그것이 효과가 있다고 생각한다! 나는 그것을 조금 더 시험 할 것이다! – BasC

+0

쿼리가 작동하지만 올바른 항목을 선택하지 않습니다. 나는 SQL-fiddle을 게시 할 것이다. – BasC

+0

귀하의 질의는 현재 날짜에'scheduled'에 항목이없는'rooms'에있는 모든'id'를 선택합니다. 시간 조건이 아직 작동하지 않습니다. 그걸 들여다 볼 수 있니? – BasC

관련 문제