2013-01-14 5 views
0

이 작업에 문제가 있습니다. 검색 쿼리의 조건부 정보를 기반으로 여러 WHERE 문을 사용해야합니다. 그 안에는 LIKE 문이 작동하지 않는 것 같습니다.여러 개의 WHERE 절이있는 SQL Like 문

데이터베이스에서 STREET_NUM & STREET_NAME은 다른 행에 있습니다. 나는 또한이 MIN & MAX 작업을 받고 고민하고 $address

호출에 대해 확인하는 하나 개의 입력 필드를 사용하고 있습니다.

$sql = "SELECT * FROM arc_property_res WHERE (arc_property_res.STATUS = 'Active'"; 
     if(!empty($_GET['city'])){ 
      // City only query! 
      $sql .= "AND arc_property_res.CITY = '{$_GET['city']}'"; 
     } 
     if(!empty($_GET['neighborhood'])){ 
      // Hood only query! 
      $sql .= "AND arc_property_res.SUBDIVISION = '{$_GET['neighborhood']}'"; 
     } 
     if(!empty($_GET['mls-number'])){ 
      // MLS only query! 
      $sql .= "AND arc_property_res.MLS_ACCT = '{$_GET['mls-number']}'"; 
     } 
     if(!empty($_GET['min-price']) && !empty($_GET['max-price'])){ 
      // MIN AND MAX only query! 
      $sql .= "AND arc_property_res.LIST_PRICE = MIN('{$_GET['min-price']}') MAX('{$_GET['max-price']}')"; 
     } 
     if(!empty($_GET['num-of-beds'])){ 
      // BEDS only query! 
      $sql .= "AND arc_property_res.BEDROOMS = '{$_GET['num-of-beds']}'"; 
     } 
     if(!empty($_GET['num-of-baths'])){ 
      // BATHS only query! 
      $sql .= "AND arc_property_res.BATHS_FULL = '{$_GET['num-of-baths']}'"; 
     } 
     if(!empty($_GET['mls-number'])){ 
      // BATHS only query! 
      $sql .= "AND arc_property_res.MLS_ACCT = '{$_GET['mls-number']}'"; 
     } 
     if(!empty($_GET['address'])){ 
      $sql .= "AND arc_property_res.STREET_NUM LIKE '%{$_GET['address']}'"; 
      $sql .= "OR arc_property_res.STREET_NAME LIKE '{$_GET['address']}%'"; 
     } 

    $sql .= ") ORDER BY {$orderby}{$price_order}{$comma}{$list_date}"; 
+0

결과 쿼리를 게시하여 쉽게 읽을 수 있습니까? – Elwi

답변

1

난 당신이 필요로하는 모든이 arc_property_res.STREET_NUM 주위에 약간의 괄호 생각 : 여기

는 쿼리입니다. 또한 구문 오류가 발생하지 않도록 전체 코드에서 각 행 주위에 공백을 추가하는 것이 좋습니다. 명백한 "Bobby Tables" issue that your query has 외에도

if(!empty($_GET['address'])){ 
    $sql .= " AND (arc_property_res.STREET_NUM LIKE '%{$_GET['address']}' "; 
    $sql .= " OR arc_property_res.STREET_NAME LIKE '{$_GET['address']}%') "; 
} 
+0

흠, 시도했지만 아무 것도 없습니다. 주소 NUM 또는 거리 이름 만 입력하면 작동하지만 OR 문을 사용하여 둘 다 찾지는 않습니다. –

+0

@IamDanGavin 쿼리를 수동으로 시도한 적이 있습니까? – Kermit

+0

제공하신 내용을 반영하도록 코드를 업데이트했습니다. 그것은 단지 여전히 그들을 별도의 항목으로 취급하고 동시에 두 가지를 찾지 않습니다. –

1

는 손의 문제는 AND 앞에 공백을 삽입하지 않는다는 것입니다. 이것은 다음과 같이 쿼리 결과 :

3AND 사이에 공백이 없다는 것을
AND arc_property_res.BEDROOMS =3AND arc_property_res.BATHS_FULL =2 

주 - 구문 오류.

쿼리를 매개 변수화하고 NULL으로 설정된 매개 변수를 무시하는 방식으로 수정해야합니다.

SELECT * FROM arc_property_res WHERE (arc_property_res.STATUS = 'Active' 
AND (arc_property_res.CITY = @cityParam OR @cityParam is NULL) 
AND (arc_property_res.SUBDIVISION = @subdiv OR @subdiv is NULL) 
... 
) 

이 수정에 관계없이 실제로 설정된 매개 변수의 수와 동일한 쿼리를 계속 할 것, 거의 같은 시간을내어 당신에게 동일한 결과를 얻을 수 있습니다.

+0

멋진 링크 : D –

1

$sql .= "AND arc_property_res.LIST_PRICE = MIN('{$_GET['min-price']}') MAX('{$_GET['max-price']}')";

최소 및 최대 기능은 데이터베이스의 필드의 최소 및 최대를 얻고 싶은 경우에 대한 것입니다.

원하는 것은 사용자가 제공 한 최소값과 최대 값 사이에 들어 있는지 확인하기 위해 목록 가격을 비교하는 것입니다.

$sql .= " AND arc_property_res.LIST_PRICE >= '{$_GET['min-price']}' AND arc_property_res.LIST_PRICE <= '{$_GET['max-price']}'";