2013-01-09 2 views
1

사용자가 5 개의 입력 필드를 사용하여 mysql 데이터베이스를 검색 할 수있는 웹 페이지가 있고 각 입력 필드가 mysql 테이블의 열과 일치합니다. 지금부터는 데이터베이스를 검색 할 수 있지만 모든 필드는 테이블에있는 것과 정확하게 일치해야하며 결과가 반환되기 위해서는 전체 LIKE 및 AND 문이 필요합니다. 내가 원하는 것은 데이터베이스가 주어진 정보를 포함하는 모든 인스턴스를 반환하는 것보다 처음 두 필드 만 알고있는 경우입니다. 또한 사용자가 처음 두 필드 이상을 채우는 경우 쿼리는이를 고려하여 주어진 모든 정보와 일치하는 모든 결과를 반환합니다. 나는 가중치가있는 검색을 보았고, 그것이 내가 필요로하는 것에 가깝게 만들 것이라고 생각했다. 그러나 가중치가있는 검색은 항상 결과를 리턴 할 것이고, 더 정확한 것은 꼭대기에 올 것이고, 내가하고있는 것에 대해서는 결과가 반환되지 않아 발견 된 결과가 없습니다. 너희들이 이것을 코딩하는 방법으로 나를 도울 수 있다면 크게 감사하겠다.구체적이고 광범위한 MySQL 검색

답변

0

당신은 PARAMS 먼저 비어 있지 않은 어떤 알아 내야 & "부터 시작 :

$query = "SELECT * FROM table WHERE".substr($query,3); 
+0

안녕하세요 맑은 나는 완전히 내 SQL과 PHP 그리고 foreach 나 $ param을 본 적이 처음있는 것은 아니지만 나는 그것의 요지를 얻은 것 같아요. 내가 정확히 따라 가지 않으면 저를 시정하십시오. 따라서 첫 번째 코드는 기본적으로 게시 된 필드 정보를 가져 와서 $ params라는 배열에 저장하는 것입니다. 두 번째 코드는 해당 배열을 가져 와서 각 인덱싱 된 필드를 넣은 다음 사용 가능한 MySQL 쿼리 문자열에 넣는 것입니다. 세 번째 코드는 $ 쿼리 변수를 사용하여 select 문에 넣습니다. 이 문제에 내가 틀렸다면 나에게 알려주십시오. – Nate

+0

예. 당신도 그것을 이해했습니다. – primetwig

+0

안녕하세요 맑은 데 도움을 주셔서 감사합니다. 약간의 추가 작업이 필요했고 새로운 것을 배웠지 만 정확히 필요한 방식으로 작동하게 만들었고 올바른 방향으로 나를 지적했습니다. – Nate

0

PHP를 사용하여 부분적으로 쿼리를 작성하고 값이 있으면 필요한 부분을 추가하십시오. 따라서 다음과 같이됩니다.

$sql = "SELECT * FROM table WHERE 1"; 
$sql = .= (if(isset($_POST['field1']) && $_POST['field1'])?' AND field1='{$_POST['field1']}':''; 
//etc 

분명히 이것은 기본적인 예이며 그대로 사용해서는 안됩니다. 쿼리에서 사용하기 전에 사용자가 입력 한 내용을 살균해야합니다.

foreach $_POST as $param { 
$params[] = $param; 
} 

는 다음 WHERE ATTR에 대한 긴 발현 확인해야합니다 :

$query = ""; 
foreach $params as $param_name=>$param { 
$query .= " && ".$param_name."=".$param; 
} 
// output: " && age=15 && gender=female && eyes=brown" 

을하고 마침내 & "없이 SELECT을