2012-12-21 3 views
0

검색 필터 기능을 만들고 URL을 통해 필터 정보를 보내고 있습니다. 내가 직면하고있는 문제는 그것이 필터이기 때문에 일부 정보는 그곳에있을 것이며 일부는 그렇지 않을 것이라는 것입니다. 이렇게하면 정의되지 않은 변수 문제가 발생합니다.여러 MySQL 테이블에서 큰 쿼리를 수행하는 방법은 무엇입니까?

최대 필터 크기는 다음과 같습니다. search.php? 고양이 = 컴퓨터 & 크레딧 1 = 1 & 크레딧 2 = 2 & rev = 5 & 별 = 5. 또한 GET 변수 세트를 기반으로 여러 SQL 테이블에서 데이터를 가져옵니다.

검색어를 실행하기 위해 특정 시간에 일부 변수가 설정되지 않은 것을 어떻게 설명 할 수 있습니까? 나는 각각의 경우에 대해 설명하는 if else 문장을 통해이 작업을 수행 할 수 있다고 생각하지만, "더티 코드"처럼 보입니다.

+1

defaults,'array_merge()'with $ _GET' –

답변

3

전달 된 필터 값을 기반으로 동적으로 SQL 문을 작성해야합니다. 이것은 조건문을 의미 할 가능성이 높지만 이것은 데이터베이스에서 쿼리를 최적화하기위한 최상의 방법입니다.

이 이런 식으로 뭔가를 (예 mysqli를 사용하지만,이 DB 라이브러리의 모든 종류의 준비된 문을 사용하는 유사해야합니다) 보일 수 있습니다 : 당신의 배열을 만들 수 있습니다 빠른/쉬운 방법으로

$query = 'SELECT * FROM table'; // or specifically specify the fields you need in result set. 
if (empty($_GET['cat']) && empty($_GET['credits1']) && empty($_GET['credits2']) && empty($_GET['rev']) && empty($_GET['stars'])) { 
    // there are no search filters set so maybe you alert some sort of error 
} else { 
    $query .= ' WHERE '; 
    $parameters = array(); 
    $at_least_one_where_set = false; 
    if (!empty($_GET['cat'])) { 
     if($at_least_one_where_set === true) { 
      $query .= ' AND cat=?'; 
     } else { 
      $query .= 'cat=?'; 
     } 
     $at_least_one_where_set = true; 
     $parameters[]['value'] = $_GET['cat']; 
     $parameters[]['type'] = 's'; 
    } 

    // do similar conditionals for each $_GET value you are interested in. 

    // query the database  
    $mysqli = new mysqli('host', 'user', 'password', 'database'); 
    $stmt = $mysqli->stmt_init(); 
    $stmt->prepare($query); 
    foreach ($parameters as $parameter) { 
     $stmt->bind_param($parameter['type'], $parameter['value']); 
    } 
    $stmt->execute(); 

    $result = $stmt->get_result(); 
    while ($row = $result->fetch_assoc()) { 
     // do something with your result row 
    } 
} 
+0

어떻게 동적으로 질의를 작성하겠습니까? 정의되지 않은 변수를 만들 수있는 방법을 생각할 수 없습니다. – Arun

+0

@Arun 내 대답에 예제가 추가되었습니다. –

+0

감사합니다. 마이크, 정말로이 예를 넣었던 시간에 감사드립니다. – Arun

관련 문제