2010-03-19 10 views
0

나는 사용자가 쿼리를 제출 한 후 결과를 조정할 수있는 검색 창을 만들고 있습니다. 우리는 결과에서 특정 분야의 일반적으로 발생하는 값을 추출하여 인기도 순으로 표시합니다. 이베이에서 이런 종류의 것을 보았습니다. 따라서 2009 년에 결과의 행이 많이 생성되면 "2009"를 클릭하고 해당 연도에 생성 된 행만 볼 수 있습니다.검색 결과 수정 [PHP/MySQL]

이 필터를 적용하는 가장 효율적인 방법은 무엇입니까? 내 작업 솔루션과 같은 여분의 인수와 일치하지 않은 결과에서 항목을 삭제하는 것이 었습니다 :

while($row = mysql_fetch_assoc($query)) { 
    foreach($_GET as $key => $val) { 
     if($val !== $row[$key]) { 
      continue 2; 
     } 
    } 
    // Output... 
} 

희망 만 쿼리를 변경하지 않는 필터를 추가로 한 번 효과에 데이터베이스를 조회한다이 방법 - MySQL은 하나의 데이터 세트를 캐시하고 재사용 할 수 있습니다. 단점은 페이지 매김을 약간 두통으로 만듭니다.

$sql = "SELECT * FROM tbl MATCH (title, description) AGAINST ('$search_term')"; 
foreach($_GET as $key => $var) { 
    $sql .= " AND ".$key." = ".$var; 
} 

대신이 작업을 수행하는 좋은 이유가 있습니다 :

명백한 대안은 초기 쿼리에 뭔가를 추가 기준을 구축하는 것입니다? 또는 더 나은 옵션이 있습니까? 어쩌면 임시 테이블일까요? 어떤 생각 많이 감사!

+0

나는 첫 번째 쿼리에 들어가는 모든 기준을 가진 유사한 시스템을 사용하고 있습니다 ... 즉, 초기 쿼리의 일부가 아닌 필터 일 수도 있습니다. 코드 조각을 생성하고 쿼리를 동적으로 생성 할 때 처리되거나 처리되지 않습니다. 당신이 말했듯이, 페이지 매김을 쉽게하고 한 곳에서 물건을 유지합니다. – Tom

+0

감사합니다. Tom! 그것이 살아 있다면 나는보고 싶네요 ... – cantlin

답변

1

나는 모든 것을 함께 유지하고 페이지 매김의 악몽을 줄이기 위해 데이터베이스를 다시 쿼리 할 것입니다.

AJAX를 통해이 작업을 수행하고 있습니까?

+0

답장을 보내 주셔서 감사합니다. 이상적으로는 AJAX를 사용하는 시스템을 선호하지만, 현재는 페이지 새로 고침이 필요합니다. – cantlin

1

옵션을 사용하고 있습니까?

메모리 저장 엔진을 사용하면 많은 시간을 절약 할 수 있습니다. (비록 그것은 소량이 될 것입니다)

+0

흥미로운 제안. 아마도 작지만 과하게 작아 질지 모르지만 작동 할 수 있습니다. 감사! – cantlin