2011-11-15 4 views
0

나는 다음과 같은 기록이있는 테이블이 범위 :MySQL의 쿼리는

id_hotel - fecha_desde - fecha_hasta 
-------------------------------------------------- ---- 
     4  2011-01-01 2011-01-14 
     4  2011-01-05 2011-01-30 
     4  2011-01-31 2011-02-07 
     4  2011-02-13 2011-02-25 
     3  2011-01-01 2011-03-14 
     5  2011-01-01 2011-01-29 
     5  2011-01-30 2011-02-27 

을 그리고 난이 쿼리해야 : 나는 날짜 $desde = 2011-01-04$hasta = 2011-03-02

결과 I가

을 주는 id_hotel은 현재 사용 가능하며 그 사이에 빈 자리가 없습니다 (예 : id_hotel 4). 2011 년 2 월 7 일과 2013 년 3 월 2 일 사이에는 6 일을 사용할 수 없습니다. id_hotel = 4 그러자

떠날 필요가 없습니다 것입니다,하지만 난 다음 쿼리 사용으로 id_hotel = 3의 예에서 3, 5

, 나는 아무 문제가 : 나는이

SELECT  id_hotel 
FROM   fechas_disponibilidad 
WHERE  \''. $desde. '\' BETWEEN fecha_desde  AND fecha_hasta 
AND   \''. $hasta. '\' BETWEEN fecha_desde  AND fecha_hasta 

을 날짜 : 2011-01-04 및 날짜 최대 : 03/02/2011

결과는 id_hotel입니다. 현재 사용 가능한 공간이 있으며 그 사이에 빈 공간이 없습니다 (예 : id_hotel 4) 그 사이에 2011 년 2 월 7 일과 2013 년 12 월 13 일은 6 일간 사용할 수 없습니다. id_hotel = 4 그러자

은 떠날 필요가없는 것이지만, id_hotel = 3의 예에서 3, 5

, 나는 아무런 문제가 없을 나는 다음과 같은 쿼리를 사용할 때 :

을하지만 이상이있을 때 한 날짜 범위 id_hotel 열, 쿼리를 실현하는 방법을 모르겠다.

답변

0

하나의 쿼리로 수행 할 수 있다고 생각하지 않습니다. 나는 (내 select() 기능에 대한 의사-SQL, 대신 실제 DB 작업 작성) 알고리즘 다음과 같은 제안 :

$results = array(); 
$hotels = select("SELECT DISTINCT id_hotel FROM fechas_disponibilidad WHERE '" . $desde . "' BETWEEN fecha_desde AND fecha_hasta") 
foreach ($hotels as $hotel_id) { 
    $available_to = $desde; 
    while ($available_to < $hasta) { 
     $available_to = select("SELECT MAX(fecha_hasta) FROM fechas_disponibilidad WHERE id_hotel = " . $hotel_id . " AND '" . $availableTo . "' BETWEEN (fecha_desde - 1) AND fecha_hasta "); 
     if (isNull($available_to)) { 
      continue 2; 
     } 
    } 
    $results[] = $hotel_id; 
} 

을 또는 동일한 작업을 수행 MySQL의 기능을 만들 수 있습니다.

+0

mysql_query()를 사용하여 예제를 줄 수 있습니까? 기능?? – nicojmb