2011-12-21 4 views
0

데이터베이스에서 검색하는 문구가 있습니다. "Hawthorne Heights - 깨지기 쉬운 미래"SQL 검색 - 한 번에 1 단어 적음 - MySQL & PHP

이렇게하면 "Hawthorne Heights"만 검색하면 결과가 더 많아집니다.

제 질문은 원하는 결과를 얻을 때까지 검색 조건을 줄이는 것입니다.

예. 초기 검색

"호손 하이츠 - 허약 한 미래"다음

"호손 하이츠 - 깨지기 쉬운"다음

"호손 하이츠"

다음

을 "호손"

초기 검색 용어는 한 단어 일 수 있습니다.이 경우 1 패스 만 필요한 것이거나 10 단어 일 수 있습니다.

하나의 쿼리에서 가능합니까? 아니면 다시 구문 검색을 줄여야합니까? 그렇다면 어떻게 구를 줄일 수 있습니까?

도움을 주셔서 감사합니다. 다음은

내가 쿼리에 대해 현재 사용하는 코드입니다 : 그 $의 SEARCHTERM,

$searchTerm = trim($searchTerm); 

    $result345 = mysql_query("SELECT main_category, PRid, title, genre, imageURL, lowprice, highprice, prodcatID from PRprodINFO2 where (($title LIKE '%$searchTerm%') AND (imageURL <>'') $is_cat_id) $genre order by $order_col $asc_desc limit 2000",$db); 

$ 변수 (예 : $ 제목 등 $ is_cat_id) 동적하지만 쿼리에 영향을 미치지 않는 곳 문구 저장됩니다

+0

쿼리 세부 정보를 제공하면 코드를 작성할 수 있습니다. thx :) – Chandresh

+0

@Chandresh 코드가 추가되었습니다. 도움을 주셔서 감사합니다. –

+0

제 편집 된 답변을 확인하십시오.고마워 – Chandresh

답변

0

내 이해에 따라, 귀하의 경우에는이 사용자 지정 쿼리를 만들 필요가 있습니다. 이 경우 먼저 "-"과 검색 키워드를 분리/폭발시킨 다음 space ("")을 사용해야합니다.

그러면이 작업이 끝나면 모두 6 단어 미만의 단어가 표시됩니다.

For example : 

your search keyword is = "Hawthorne Heights - Fragile Future" 

1) Hawthorne Heights 
2) Fragile Future. 
3) Hawthorne 
4) Heights 
5) Future 
6) Fragile 

이러한 모든 단어를 하나의 배열로 만들고 루프에서 쿼리를 만듭니다. 이들은 OR 조건과 연결되어 있습니다. 귀하의 요청으로 당

EDITE :

$searchterm = "Hawthorne Heights - Fragile Future"; 

$keyword = explode("-",$searchterm); 

for($i=0;$i<count($keyword);$i++){ 
    $word[] = explode(" ",trim($keyword[$i])); 
} 

for($j=0;$j<count($word);$j++){ 
    $str[] = implode(',',$word[$j]); 
} 


$strArr = explode(',',implode(',',$str)); 

$queryStr = ""; 
for($cnt = 0;$cnt<count($strArr);$cnt++){ 
    $queryStr.= "($title LIKE '%".$strArr[$cnt]."%') OR"; 
} 

$searchTerm = substr($queryStr,0,-2); 


$result345 = mysql_query("SELECT main_category, PRid, title, genre, imageURL, lowprice, highprice, prodcatID from PRprodINFO2 where (($title LIKE '%$searchterm%'OR $searchTerm) AND (imageURL <>'') $is_cat_id) $genre order by $order_col $asc_desc limit 2000",$db); 

이 코드를 더 최적화를 할 수 있지만 서둘러 난 나에게 빨리 클릭 무엇을하기 때문에 .. :)

이 수도 도움 당신이하고 싶은 일이 있으면 알려주세요 ..

고마워요.

관련 문제