YesYo.com MintState Forums
뒤로    YesYo.com MintState BBS > Tech > PHP
검색
멤버이름    오토
비밀번호 
 

and, or 등의 검색식을 지원하는 검색엔진 함수

페이지 정보

작성자 MintState 댓글 0건 조회 11,364회 작성일 08-11-10 13:15

본문

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에서 지원하는 _ 와 %도 가능 하겠죠~

/*

제작자이름 : 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;
}

댓글목록

등록된 댓글이 없습니다.

Total 165건 6 페이지
PHP 목록
번호 제목 글쓴이 조회 날짜
40 MintState 12239 11-03
39 MintState 12237 11-12
38 MintState 12235 10-29
37 MintState 12175 10-29
36 MintState 12047 10-28
35 MintState 11955 11-03
34 MintState 11853 11-03
33 MintState 11780 10-31
32 MintState 11728 10-29
31 MintState 11706 07-27
30 MintState 11639 02-23
29 MintState 11629 10-29
28 MintState 11517 10-29
27 MintState 11513 10-31
26 MintState 11494 10-31
25 MintState 11415 11-10
열람중 MintState 11365 11-10
23 MintState 11298 11-03
22 MintState 11206 11-03
21 MintState 11124 10-31
20 MintState 11059 10-29
19 MintState 10959 10-29
18 MintState 10859 10-29
17 MintState 10775 10-31
16 MintState 10557 10-29
게시물 검색
모바일 버전으로 보기
CopyRight ©2004 - 2024, YesYo.com MintState. ™