2013-02-20 2 views
0

내가 쿼리를 작성하는 것을 시도하고있다 WHERE에서 확인이 지금까지의 WHERE 절입니다 :조건 절

WHERE (s.subject_name LIKE '%$keyword%' OR 
     c.city_name LIKE '%$keyword%' OR 
     o.option_name LIKE '%$option%' OR 
     d.district_id = $districtId OR 
     c.city_id = $cityId 
     ) 

내 실제 조건은 다음과 같습니다

  • $keyword는 항상 값을 보유해야한다. 다른 3 수 없습니다.
  • 값이 $keyword 인 경우 $keywordsubject_name 또는 city_name이 일치해야합니다.
  • $optional가 값을 가지고 있다면, 반환 된 레코드 $keyword 일치해야하고 $cityId가있는 경우 $districtId에 값이 $option
  • 경우, 결과는 3 개 변수 값 ($keyword, $option, $districtId) 마지막
  • 일치해야 값이 다른 3과 함께 반환 된 결과는 4 개의 변수 값 모두와 일치해야합니다.

이러한 조건은 내 검색 페이지에서 가져온 것입니다. $keyword은 텍스트 상자의 값이고 검색을 시작하려면 키워드가 필요합니다. 그것이 내가 항상 가치가 있다고 말한 이유입니다. 다른 3 개의 값은 필요할 때 항목을 선택할 수있는 선택 상자에서옵니다.

나는 그 쿼리를 만들려고했다. 그러나 나는 실제로 WHERE 절과 혼동합니다. 위 코드는 지금까지 WHERE 절에서 왔습니다. 하지만 원하는 결과를 얻을 수 없습니다.

WHERE (
    (s.subject_name LIKE '%$keyword%' OR c.city_name LIKE '%$keyword%') 
    AND ('$option' = '' OR (
     o.option_name LIKE '%$option%' AND (
      '$districtId' = '' OR (
       d.district_id = $districtId AND (
        '$cityId' = '' OR c.city_id = $cityId 
       ) 
      ) 
     ) 
    ) 
) 

그러나이 훨씬 차선입니다 : 당신이 순수 SQL에서이를 달성하려면

+2

원하는 결과는 무엇이며 geT는 무엇입니까? –

+0

http://stackoverflow.com/questions/5540416/how-to-ignore-a-condition-in-where-clause?rq=1 –

+0

출력이 5 개 중 하나라도 일치해야하는 경우 – ugnuku

답변

1

, 이것은 당신이 (또는 적어도 충분히 가까이 있어야)가 필요합니다 것입니다. 대신 PHP에서 사용자 입력 내용을 확인하고이 입력에 따라 다른 쿼리를 실행해야합니다. 또한 동적으로 쿼리를 작성할 수 있습니다.

$query = "SELECT ..."; 

$query .= 
    " WHERE ((s.subject_name LIKE '%$keyword%' OR c.city_name LIKE %$keyword%')"; 
if (!empty($option)) { 
    $query .= " AND o.option_name LIKE '%$option%'"; 
    if (!empty($districtId)) { 
     $query .= " AND d.district_id = $districtId"; 
      if (!empty($cityId)) { 
       $query .= " AND c.city_id = $cityId"; 
      } 
    } 
} 
$query .= ')';