2011-10-21 2 views
0

MySQL 데이터베이스를 검색 한 다음 결과를 표시하는 PHP 키워드 검색 스크립트가 있습니다. 현재 스크립트는 MySQL 데이터베이스의 필드에 첨부 된 단일 키워드를 기반으로 결과를 찾습니다.PHP/MySQL 키워드 기반 검색에 복수 키워드 할당

내 질문은; 하나 이상의 입력란에 여러 개의 키워드를 첨부하고 해당 키워드 중 하나 이상이 사용자 검색어와 일치하면 어떻게 결과를 반환합니까?

내 데이터베이스에서 키워드를 정의하고 쉼표로 구분할 수 있습니까? 예 : 이,하는 fulltext index를 사용, 필드

<?php 

mysql_connect("localhost","username","password"); 
mysql_select_db("database"); 

if(!empty($_GET['q'])){ 
$query=mysql_real_escape_string(trim($_GET['q'])); 
$searchSQL="SELECT * FROM questions WHERE `keywords` LIKE '%{$query}%' LIMIT 1"; 
$searchResult=mysql_query($searchSQL); 

while($row=mysql_fetch_assoc($searchResult)){ 
$results[]="{$row['result']}"; 
} 

echo implode($results); 
} 

?> 

답변

2

하나,에, 또는 화합물에 키워드 목록을 나눌 것 "여기서처럼 ... 나처럼 ... 나 같은 ..." 문 :

$keywords = explode(' ', $_GET['q']); 
$likes = array() 
foreach($keywords as $kw) { 
    $kw = mysql_real_escape_string($kw); 
    $likes[] = "keywords LIKE '%{$kw}%'"; 
} 

$sql = "SELECT ... WHERE " . implode(' OR ', $likes); 

관계형 데이터베이스에 하나의 필드에 복합 데이터를 저장하면, 전체 필드의 하위 부분에 액세스 할 필요 해요 특히, 드물게 좋은 생각입니다. 키워드는 레코드 당 하나의 키워드 인 별도의 테이블에 저장해야합니다. 그런 다음 링크 테이블을 사용하여 여러 키워드를 상위 테이블의 개별 레코드와 연관시킬 수 있습니다.

+0

@Callum Whyte, 이것은 전체 코드 예제입니다. '%%'이 (가) 색인되지 않기 때문에 가능한 경우 전체 텍스트 검색을 실제로 사용해야합니다. –