데이터베이스를 쿼리하여 다음을 찾으려고합니다.MySQL - 쿼리에 어떤 문제가 있습니까?
고객이 도시 A와 B 사이의 호텔을 검색하는 경우 두 날짜 사이에 객실이없는 호텔을 찾아 돌려 보냅니다.
각 객실 유형에 A 룸 5 개 객실, B 룸 게스트 룸 10 개 등 여러 개의 객실이 있으며 최소한 데이터베이스가있는 호텔을 찾기 위해 데이터베이스를 쿼리해야합니다 1 개 이상의 객실은 1 개 이상 무료입니다.
이
내 테이블 구조입니다 :**Structure for table 'reservations'**
reservation_id
hotel_id
room_id
customer_id
payment_id
no_of_rooms
check_in_date
check_out_date
reservation_date
**Structure for table 'hotels'**
hotel_id
hotel_name
hotel_description
hotel_address
hotel_location
hotel_country
hotel_city
hotel_type
hotel_stars
hotel_image
hotel_deleted
**Structure for table 'rooms'**
room_id
hotel_id
room_name
max_persons
total_rooms
room_price
room_image
agent_commision
room_facilities
service_tax
vat
city_tax
room_description
room_deleted
그리고 이것은 내 쿼리입니다 :
이미 각 호텔의 각 객실 유형에 예약 된 객실의 수는 예약 테이블에 저장됩니다$city_search = '15';
$check_in_date = '29-03-2010';
$check_out_date = '31-03-2010';
$dateFormat_check_in = "DATE_FORMAT('$reservations.check_in_date','%d-%m-%Y')";
$dateFormat_check_out = "DATE_FORMAT('$reservations.check_out_date','%d-%m-%Y')";
$dateCheck = "$dateFormat_check_in >= '$check_in_date' AND $dateFormat_check_out <= '$check_out_date'";
$query = "SELECT $rooms.room_id,
$rooms.room_name,
$rooms.max_persons,
$rooms.room_price,
$hotels.hotel_id,
$hotels.hotel_name,
$hotels.hotel_stars,
$hotels.hotel_type
FROM $hotels,$rooms,$reservations
WHERE $hotels.hotel_city = '$city_search'
AND $hotels.hotel_id = $rooms.hotel_id
AND $hotels.hotel_deleted = '0'
AND $rooms.room_deleted = '0'
AND $rooms.total_rooms - (SELECT SUM($reservations.no_of_rooms) as tot
FROM $reservations
WHERE $dateCheck
GROUP BY $reservations.room_id) > '0'";
.
쿼리가 결과를 전혀 반환하지 않는 것입니다. 비록 내가 직접 계산한다면 그것을해야한다.
하위 쿼리를 단독으로 실행하려고 시도했지만 결과가 없습니다. 그리고 나는 어제부터이 쿼리를 버그를 없애려고 노력하면서 꽤 많은 양의 머리카락을 잃어 버렸습니다. 이게 뭐가 잘못 됐어? 아니면 위에 언급 한 것을 수행하는 더 좋은 방법이 있습니까?
편집 : 버그 수정을 위해 편집 된 코드. Mark Byers에게 감사드립니다. 당신은 첫 번째 피연산자는 스칼라 값 빼기 total_rooms - (tot, id)
을하고
$rooms.total_rooms - (SELECT SUM($reservations.no_of_rooms) as tot,
$rooms.room_id as id
FROM $reservations,$rooms
WHERE $dateCheck
GROUP BY $reservations.room_id) > '0'"
두 번째는 다음과 같습니다
Sample Data in reservation table
1 1 1 2 1 3 2010-03-29 2010-03-31 2010-03-17
2 1 2 3 3 8 2010-03-29 2010-03-31 2010-03-18
5 1 1 5 5 4 2010-03-29 2010-03-31 2010-03-12
하위 쿼리가 문제가 여기에있다
Room ID : 1 Rooms Booked : 7
Room ID : 2 Rooms Booked : 8
But it does not return any value at all.... If i remove the dateCheck condition it returns
Room ID : 2 Rooms Booked : 8
덕분에 오류가 없어 ... ...하지만 쿼리 자체가 어떤 결과를 반환하지 않습니다 :
당신은 아마이 라인을 따라 뭔가를 원하는 내 인생을 위해 그것을 알아 내려고 ... 나는 논리적으로 어디로 잘못 갔는지 지적 할 수 있는지 궁금해했다. – SpikETidE
당신의 하위 쿼리가 여전히 잘못된 것으로 의심된다. GROUP BY는 의심스러워 보일 것입니다. 아마도 WHERE가있는 상관 하위 쿼리를 의미 할 것입니다. 상관 하위 쿼리를 사용하는 대신 하위 쿼리를 사용하여 조인하는 것이 좋습니다. 그런 다음 이드를 돌려주고 싶습니다. –
귀하의 질문에 방과 예약 사이에 명백한 관계가없는 이유는 무엇입니까? 새로운 ANSI "JOIN ... ON ..."구문을 사용하여이 쿼리를 다시 작성하는 것이 좋습니다. –