2012-09-26 2 views
1

3 개의 드롭 다운 상자에서 작동하는 검색 기능이 있습니다. 선택한 기준에 따라 프로파일이 리턴됩니다. 3 드롭 다운은 다음과 같습니다쿼리에 사용할 값을 알 수없는 경우 SQL 쿼리 만들기

  • 카운티
  • 구민
  • 성별
  • 이제

내가 쿼리를 작성하는 것을 시도하고있다 그러나 다만 실제로 사람이 옵션을 선택하지 않는 것을 실현 각 드롭 다운에서 그리고 나는 그 (것)들을에 원한다.

예를 들어 각 드롭 다운에서 옵션을 선택할 때까지 검색 버튼을 비활성화하고 싶지 않습니다.

임의의 드롭 다운에서 값을 선택하고 드롭 다운에서 값을 선택하지 않고 검색 버튼을 클릭하기 만하면 알 수없는 조합에 어떻게 대처할 수 있는지 이해하려고합니다.

내 첫 번째 생각은 내가 진리 테이블과 같은 것을 사용할 수 있다고 생각했지만, 이것은 과잉이라고 생각하고 사실 이것은 매우 일반적인 기능입니다. 그럼 난이 비어 있는지 확인하고 어떻게 든, 예를 들어,이 값을 사용할 수

$county = "$_GET['county'];"; 
$constituency = "$_GET['constituency'];"; 
$gender = "$_GET['gender'];"; 

:

그럼 내가 뭔가를 할 수 어쩌면 생각

if($county !== '') { 
    ???SOMEHOW MAKE USE OF THIS IN AN SQL QUERY??? 
    PERHAPS PASS IT TO ANOTHER PARAMETER 
    $sqlparams = "county = '$county'"; 
} 

SELECT * FROM profile 
WHERE {$sqlparams}; 

나는 올바른 길을 가고 있지만 약간의 지침을 사용할 수 있다고 생각합니다.

모든 도움을 주시면 대단히 감사하겠습니다.

답변

1

원하는대로해야합니다.

$where = array(); 

//repeat as needed 
$where[$column] = $value; 

$where2 = array(); 
foreach($where as $key => $value){ 
    $where2[] = "$key = '$value'"; 
} 

$where_string = implode(' AND ', $where2); 

$where_stringWHERE 후 삽입 할 문자열을해야합니다 :

<?php 
$tooLookFor = array("county", "constituency", "gender"); 
foreach($tooLookFor as $key){ 
    if(isset($_GET[$key]) && strlen($_GET[$key])>0){ 
     $queryParams[] = $key.'="'.$_GET[$key].'"'; 
    } 
} 
$query = "SELECT * FROM profile WHERE ".implode(' AND ', $queryParams); 
?> 
+1

당신은 그것에 나를 이길을 - 그러나, 나는'에 빈 ($ _ GET [$ 키를])'은 if 조건을 단순화 제안하고 싶습니다!. – nkorth

0

는이 같은 뭔가 그렇게 할 수 있습니다.

0

예, 올바른 길을 가고 있습니다. 아직 올바른 스위치가 아닙니다. ;)

작업해야하는 항목을 알기 전까지 쿼리를 작성할 수 없습니다. 우선, 검증 과정에서 핵심 단어가 실제로 무엇인지, 어떤 필드가 표현되어 있는지를 결정하십시오. 아마도 테이블에있는 필드에 매핑 할 것입니다. 아마도 3 개의 테이블입니까? 요점은 쿼리를 동적으로 작성해야한다는 것입니다.

1

당신은 같은 것을 할 수있는 :

$county = $_GET['county']; 
$constituency = $_GET['constituency']; 
$gender = $_GET['gender']; 

$sqlparams = array(); 

if($county !== '') { 
    $sqlparams[] = "county = '$county'"; 
} 
if($constituency !== '') { 
    $sqlparams[] = "constituency = '$constituency'"; 
} 
if($gender !== '') { 
    $sqlparams[] = "gender = '$gender'"; 
} 

$query = "SELECT * FROM profile"; 

if (count($sqlparams) > 0) { 
    $query .= " WHERE " . implode(" AND ", $sqlparams); 
} 
관련 문제