2012-12-20 2 views
0

MySQL 쿼리를 사용하여 값의 배열을 만든 후에는 해당 값이 적어도 주어진 값과 같은지 확인해야합니다. 이것은 호텔의 객실 가용성을 확인하기위한 것입니다.배열의 얼마나 많은 값이 x보다 큰지 확인

foreach($datearray as $value) { 
$query_avail = "SELECT cupo, ex_cupo.room_id FROM ex_cupo JOIN ex_rooms ON ex_cupo.room_id=ex_rooms.room_id AND ex_rooms.room_id = '$room_id' AND dt = '$value'"; 
$avail = mysql_query($query_avail, $MySQL_extranet) or die(mysql_error()); 
$row_avail = mysql_fetch_assoc($avail); 
    $availresult[] = $row_avail['cupo']; 
} 

"Cupo는"지정된 날짜에 해당하는 객실의 수는, 그래서 $ availresult이 범위에서 가능한 객실 수의 배열 될 것입니다 :

먼저 나는에게 MySQL의 쿼리를 수행 날짜.

이제 해당 날짜에 2 개의 객실을 예약 (말하기)하려는 경우 배열의 각 값이 2 이상이되도록해야합니다. 예를 들어 범위에 5 개의 날짜가 있고 2, 2, 1, 2, 2, 나는 틀린 것을 돌려 줄 필요가있다, 그러나 그들이 2, 2, 2, 2 또는 2, 2, 3, 2, 2 인 경우에, 나는 진실을 돌려 보낼 필요가있다.

어떻게하면됩니까? (내가 충분히 설명했으면 좋겠다.)

분명히 2의 선택은 단지 예일 뿐이다. 일반적으로 $ numrooms라고하는 변수가됩니다.

+0

[적절한 SQL 탈출] (http://bobby-tables.com/php)이 필사적으로 필요합니다. – tadman

답변

2
$testArray = array(2,2,2,2,1,2); 

$valid = array_reduce(
    $testArray, 
    function ($match, $value) { 
     return $match && ($value >= 2); 
    }, 
    TRUE 
); 
var_dump($valid); 

편집

어떻게 $에게 numrooms를 통과하기 : 대답 모든 사람에게

$testArray = array(2,2,2,2,1,2); 
$numrooms = 2; 

$valid = array_reduce(
    $testArray, 
    function ($match, $value) use ($numrooms) { 
     return $match && ($value >= $numrooms); 
    }, 
    TRUE 
); 
var_dump($valid); 
+0

이것은 유망 해 보이지만 나는 걸림돌을 때렸다.availresult = Array ([0] => 1 [1] => 2 [2] => 2 [3] => 2 [4] => 2 [5] => 2) 테스트 배열을 만들었습니다. $ value> = 2 일 때 $ valid는 false입니다. 이는 내가 원하는 것입니다. 그리고 $ value> = 1 인 경우 $ valid가 true이며 이는 또한 좋습니다. 하지만 $ value> = $ numrooms 및 $ numrooms = 2이면 $ 유효합니다 !!!!! – TrapezeArtist

+0

감사합니다. 나는 아직도 거기에 무슨 일이 일어나는지 이해하지 못한다. 그러나 그것은 나의 작은 테스트 파일에서 완벽하게 작동했다. 나는 이제 그것을 실제 페이지에 통합하는 것을 계속 추진할 것입니다. 38k의 PHP 코드가 여러 가지 변화를 가져와 통합되어 있으므로 시간이 좀 걸릴 것입니다. 그러나 나는 그것이 지금 모두 작동 할 것이라고 확신합니다. – TrapezeArtist

4

SQL 코드에 WHERE cupo > 2을 추가하십시오. 결과를 따라 가면서 cupo> 2를 직접 확인하기보다는 데이터베이스가 원하는 결과만을 제공하도록하십시오.

매개 변수를 변경해야 할 경우 매개 변수화 된 쿼리를 사용하십시오. 자세한 내용은 http://php.net/manual/en/security.database.sql-injection.php을 참조하십시오.

+0

처음에 나는 이것이 내 해결책이라고 생각했다. 그러나이를 테스트 할 때 쿼리가 결과가 아닌 결과 값을 생성하면 결과 배열에 null 값이 나타납니다. 따라서 배열의 값의 수는 무엇이든지간에 동일하므로 운동의 대상을 무효화합니다. 문제를보고 답장을 보내 주셔서 감사합니다. – TrapezeArtist

1

SQL 수준에서 (앤디가 제안한대로)이 작업을 수행 할 수 있다면 최상의 옵션이됩니다. 그러나 PHP에서이 작업을 수행해야하는 경우, 당신은 쉽게 배열을 반복 수 있고, 값이 허용 된 최소 금액보다 낮은 경우 false로 플래그를 설정 : 당신이 객실의 수를 통과해야

$minimum_val = 2; 
$enough_rooms = true; 
foreach($availresult as $item) { 
    if ($item < $minimum_val) { 
    $enough_rooms = false; 
    } 
} 
2

조건으로 당신의 SQL 문을 같은 하나는 당신의 PHP 값을 통과 할 수있는 숫자로

$query_avail = "SELECT cupo, ex_cupo.room_id FROM ex_cupo 
    JOIN ex_rooms ON ex_cupo.room_id=ex_rooms.room_id AND 
    ex_rooms.room_id = '$room_id' AND dt = '$value' WHERE cupo > 1"; 

.

0

감사합니다. 나는 지금 내 해결책이 있다고 생각하며 앞으로 나아갈 것입니다. 해피 크리스마스, 모두.

관련 문제