시작일과 종료일이 있습니다.
$s="YYYY-MM-DD";
$e="YYYY-MM-DD";
해당 범위에 대해 사용 가능한 회의실을 확인하는 쿼리를 만들어야합니다.
cObjects , cBookings_details
cObjects_id = cBookings_details_cObjects_id
나는 정말 여기에 갇혀 정말 도움이 될 것입니다.
내 현재 검색어
SELECT cObjects.*
FROM cObjects LEFT JOIN cBookings_details ON cObjects.cObjects_id = cBookings_details.cBookings_details_cObjects_id
WHERE cBookings_details.cBookings_details_arrival NOT BETWEEN '".$s."' AND '".$e."'
AND cBookings_details.cBookings_details_departure NOT BETWEEN '".$s."' AND '".$e."'
AND cBookings_details.cBookings_details_arrival <> '".$s."' AND cBookings_details_departure <> '".$s."'
AND cBookings_details.cBookings_details_arrival <> '".$e."' AND cBookings_details_departure <> '".$e."'
AND cObjects.cObjects_type < '2'
OR cBookings_details.cBookings_details_id is null AND cObjects_type < '2'
이것은 일반적인 문제입니다. 실제로이 작업에 대한 가이드를 작성했습니다.
Selecting rows with start and end dates that feature in a chosen interval
-------------------------------------------------------------------------
Chosen Interval - :start_date (S)
:end_date (E)
Rows - row.start_date (s)
row.end_date (e)
Increasing date-->
S E
| | Chosen Interval
1. s---e Rows we want
2. s---e .
3. s---e .
4. s----------e .
5. s--e Rows we don't want
6. s--e .
LOGIC:
row.end_date >= :start_date AND row.start_date <= :end_date
사용 가능한 객실을 찾는 경우 LEFT JOIN
위의 논리를 사용하여 예약에 대한 객실과 SELECT
예약이있는 행입니다 NULL
.
귀하의 스키마에 적용하면 다음과 같이 나올 것이라고 생각합니다.
SELECT o.*
FROM cObjects o
LEFT JOIN cBookings_details bd
ON bd.cBookings_details_cObjects_id = o.cObjects_id
AND bd.cBookings_details_arrival <= :end_date
AND bd.cBookings_details_departure >= :start_date
WHERE bd.cBookings_details_id IS NULL
(AND o.cObjects_type < '2') # Double check this is what you want
그건 그렇고, 당신의 스키마로 작업해야하면 울 것입니다. 열에서 테이블 이름을 반복하는 이유는 무엇입니까? 소음 만 추가됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다