[php] and, or 등의 검색식을 지원하는 검색엔진 함수
로빈아빠
본문
and, or 등의 검색식을 지원하는 검색엔진 함수
호출은 아래와 같이 해주시면 됩니다.
$array = make_where (A, B, C, D)
A : 검색어의 공백을 대체할 연산자 (and | or)
B : 검색 할 컬럼 이름 (,으로 연결)
C : 검색어
D : 검색어/부정어 선택 (1 : 부정어, 0 : 검색어)
리턴되는 $array라는 배열에는 다음과 같은 값이 저장됩니다.
$array[where] : Where절의 내용
$array[word] : 검색에 사용된 검색어 (공백으로 연결)
예)
$result = make_where ("and", "name,title", "사과 포도", 0); // 호출
echo "$result[where] <br> $result[word]"; // 결과출력
결과)
( name like '%사과%' or title like '%사과%') and ( name like '%포도%' or title like '%포도%')
사과 포도
검색식은 "(사과 and 포도) or 바나나" 와 같이 사용 하실 수 있습니다.
그리고 바로 where절에 포함하기 때문에 Mysql에서 지원하는 _ 와 %도 가능 하겠죠~
호출은 아래와 같이 해주시면 됩니다.
$array = make_where (A, B, C, D)
A : 검색어의 공백을 대체할 연산자 (and | or)
B : 검색 할 컬럼 이름 (,으로 연결)
C : 검색어
D : 검색어/부정어 선택 (1 : 부정어, 0 : 검색어)
리턴되는 $array라는 배열에는 다음과 같은 값이 저장됩니다.
$array[where] : Where절의 내용
$array[word] : 검색에 사용된 검색어 (공백으로 연결)
예)
$result = make_where ("and", "name,title", "사과 포도", 0); // 호출
echo "$result[where] <br> $result[word]"; // 결과출력
결과)
( name like '%사과%' or title like '%사과%') and ( name like '%포도%' or title like '%포도%')
사과 포도
검색식은 "(사과 and 포도) or 바나나" 와 같이 사용 하실 수 있습니다.
그리고 바로 where절에 포함하기 때문에 Mysql에서 지원하는 _ 와 %도 가능 하겠죠~
/* 제작자이름 : navyism 제작자메일 : navyism@chol.com 관련사이트 : http://navyism.com *** 검색을 위한 SQL구문의 Where절 생성 함수 $array = make_where (A, B, C, D) A : 검색어의 공백을 대체할 연산자 (and | or) B : 검색 할 컬럼 이름 (,으로 연결) C : 검색어 D : 검색어/부정어 선택 (1 : 부정어, 0 : 검색어) -> return $array[where] : Where절의 내용 $array[word] : 검색에 사용된 검색어 (공백으로 연결) */ function make_where ($blank_is, $column_list, $word, $ban) { global $word_list; if($ban) { $like = "NOT LIKE"; $join = "AND"; } else { $like = "LIKE"; $join = "OR"; } $word = stripslashes($word); $temp = eregi_replace("(\")(.*)( +)(.*)(\")","\\2[###blank###]\\4",$word); $temp = eregi_replace("\(|\)| and | or "," \\0 ",$temp); $temp = trim(eregi_replace(" {2,}"," ",$temp)); $result[word] = eregi_replace("\(|\)| and | or "," ",$temp); $temp = explode(" ",$temp); for($i=0; $i<sizeof($temp); $i++) { if($i) { if(eregi("^\)$",$temp[$i-1]) && !eregi("^or$|^and$",$temp[$i])) { $temp2[] = $blank_is; } if(!eregi("^(\(|\)|and|or)$",$temp[$i-1]) && eregi("^\($",$temp[$i])) { $temp2[] = $blank_is; } if(!eregi("^(\(|\)|and|or)$",$temp[$i-1]) && !eregi("^(\(|\)|and|or)$",$temp[$i])) { $temp2[] = $blank_is; } } $temp2[] = $temp[$i]; } for($i=0; $i<sizeof($temp2); $i++) { if(eregi("^(\(|\)|and|or)$",$temp2[$i])) { continue; } unset($temp); $temp .= "("; $temp2[$i] = addslashes($temp2[$i]); $column_list_array =explode(",",$column_list); for($j=0; $j<sizeof($column_list_array); $j++) { if($j && $temp && $temp!="(") { $temp .= " $join"; } $temp .= " $column_list_array[$j] $like '%$temp2[$i]%'"; } $temp .= ")"; $temp2[$i] = $temp; } $temp = implode(" ",$temp2); $result[where] = str_replace("[###blank###]"," ",$temp); return $result; }
관련링크
댓글목록
등록된 댓글이 없습니다.