두 테이블 : rooms
및 scheduled
이 있습니다. 예정 테이블에는 begin_time
, end_time
및 room_id
이 있으며 객실 예약시 표시됩니다. 객실 - 테이블에는 모든 객실에 id
의 항목이 있습니다.두 번째 테이블에 조건이있는 SQL 쿼리
begin_time
및 end_time
만 객실은 11
까지 9에서 예약되었음을 나타냅니다 예를 들어 '9'와 '11', 그래서 객실의 목록을 표시하려면, 시간을 포함하는 현재 사용할 수 있습니다. 이렇게하려면 현재 시간에 scheduled
에 항목이 없다는 조건에서 rooms
테이블의 모든 객실 ID를 선택하는 쿼리가 필요합니다. 따라서 현재 시간은 begin_time
과 end_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
되고 구문 오류 내가이 MySQLFiddle에서 데이터베이스를 사례? – potashin
문제는 DATE() 함수라고 생각합니다. 나는 당신이 CURDATE()를 원했던 것 같아요. http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date – emustac
@notulysses 구문 오류 :'''SQLSTATE [42000] : 구문 오류 또는 액세스 위반 : 1064 SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 매뉴얼에서 올바른 구문을 찾아서'(와) HOUR (CURDATE()) '사이에'begin_time'과'end_time'을 12 행에'''사용하십시오. 나는'CURDATE()'를 시도했으나 불행히도이 문제를 해결하지 못했다. – BasC