2013-06-25 3 views
3

체크 박스 선택에 따라 다중 카테고리의 유무에 관계없이 mysqli 전체 텍스트 검색을 만들고 싶습니다.MySQLi 전체 텍스트 검색 여러 컬럼 카테고리

검색은 동일한 열에있는 네 가지 범주를 기반으로합니다.

검색 카테고리는 Windows, 게임, 태블릿, 모바일입니다.

체크 박스 선택 검색을 통해 선택한 카테고리/다중 카테고리를 선택한 카테고리에만 적용해야하는 경우. 검색

테이블 구조

id category title    date ... 
1 windows windows7    d1 ... 
2 games  windows games  d2 ... 
3 tablet  windows tablet  d3 ... 
4 mobile  windows mobile  d4 ... 
5 windows windows8    d5 ... 
6 windows windows vista  d6 ... 

체크 박스는

검색

<li><label><input name="all" type="checkbox" checked="checked" />All</label></li> 
    <li><label><input name="windows" type="checkbox" />Windows OS</label></li> 
    <li><label><input name="mobile" type="checkbox" />Windows Mobile</label></li> 
    <li><label><input name="games" type="checkbox" />Windows Games</label></li> 
    <li><label><input name="tablet" type="checkbox" />Windows Tablet</label></li> 

예 1에서 :

Search for 'windows' should return result as 

windows7 
windows8 
windows vista 

When only checkbox windows is checked 

예 2 :

나는 쿼리를 만들었지 만 전혀 작동하지 않습니다.

$query = "SELECT * FROM $table WHERE "; 
$query .= "category='' "; 
$query .= "OR category='windows' "; 
$query .= "OR category='games' "; 
$query .= "OR category='mobile' "; 
$query .= "OR category='tablet' "; 

$query .= " AND MATCH (title) AGAINST ('+$keyword*' IN BOOLEAN MODE) ORDER by id desc, title desc LIMIT 10"; 

나는이 있지만 작동하지 않는 것처럼 노력했다.

$query = "SELECT * FROM $table WHERE "; 
$query .= "MATCH (category) AGAINST ('' IN BOOLEAN MODE) "; 
$query .= "OR MATCH (category) AGAINST ('windows' IN BOOLEAN MODE) "; 
$query .= "OR MATCH (category) AGAINST ('games' IN BOOLEAN MODE) "; 
$query .= "OR MATCH (category) AGAINST ('mobile' IN BOOLEAN MODE) "; 
$query .= "OR MATCH (category) AGAINST ('tablet' IN BOOLEAN MODE) "; 

$query .= " AND MATCH (title) AGAINST ('+$keyword*' IN BOOLEAN MODE) ORDER by id desc, title desc LIMIT 10"; 

작동하지 않는 이유를 확인하고 선택한 입력란에 대해 검색어를 검색하는 방법을 제안하십시오.

감사합니다.

+0

로 체크 박스 필드를 호출해야

$sql = "SELECT * FROM ?n WHERE category IN(?a) AND MATCH (title) AGAINST (?s IN BOOLEAN MODE) ORDER by id desc LIMIT 10"; $data = $db->($sql,$table,$_GET['category'], $_GET['keyword']); 

주 (원시 mysqli 너무 많은 코드를 취할 것 같은) safeMysql 기반으로하는 솔루션을 간다 field 반대 'field1''? 내게 꽤 이상하게 보입니다. –

+0

@YourCommonSense 거기에 테이블과 검색의 일부 열은 선택된 필드가있는 경우에만 행을 기반으로 제목에서 수행해야합니다. –

+0

오류 메시지가 나타 납니까? 바이올린이나 샘플 데이터 및 테이블 스키마에 대한 링크를 게시 해보십시오. 그러한 정보가 부족한 질문은 답변하기가 쉽지 않으며 자주 다운 투표됩니다. field1, field2 등이 같은 테이블의 다른 필드라고 가정합니다. 이 경우 따옴표를 인용 부호로 묶지 않으면 조회가 작동합니다. 즉, field = field1 또는 field = field2 OR ... –

답변

2
SELECT * FROM table WHERE MATCH (field1, field2, field3, field4) 
          AGAINST ('keyword' IN BOOLEAN MODE) 

이 필요한 것 같습니다.

그러나 SQL 인젝션에 대한 쿼리가 활발합니다.

이제 답변 할 수 있습니다. 그래서, 여기에 모든`MATCH의 포인트는 무엇 당신이

<input name="category[]" value="windows" type="checkbox" /> 
+0

검색어가 다른 열과 동일한 키워드와 일치하지만 검색어와 일치하는 필드가 여러 개인 필드 열과 필드 만 일치하고 키워드는 제목과 일치해야합니다. 그걸 도와 줄 수 있어요? –

+0

"field"와 "column"은 동의어입니다. 그래서, 당신이 무슨 말을하고 있는지 전혀 모르겠습니다. 한 필드를 다른 필드와 일치 시키면 의미가 없습니다. –

+0

다른 열과 일치하는 특정 키워드에 대해 한 열의 다른 값을 매치시키는 것이 너무 힘들다. –