사이트 내 전체검색
그누보드
검색시 특정필드에 like 검색대신 = 검색(일치) 사용하기 (속도가빠름)
로빈아빠
https://cmd.kr/gnu/37 URL이 복사되었습니다.

본문

부족전쟁스킨을 만들다 보니, 제목에 유저명을 넣었는데, 검색을 하려니 like 검색이 되어
너무 느리다.. 제목필드를 포기하기도 그렇고 소스에 일일이 다 = 검색을 넣기도 뭐할때..
검색필드명에 inx_???? 라고 지정하면 해당 필드는 = 검색이 되게 하자..

1. list.skin.php 의 검색부분 수정
        <select name="sfl">
            <option value="inx_wr_subject">유저아이디</option>
            <option value="wr_subject">아이디검색</option>
            <option value="wr_content">내용</option>
            <option value="wr_subject||wr_content">제목+내용</option>
            <option value="mb_id,1">회원아이디</option>
            <option value="mb_id,0">회원아이디(코)</option>
            <option value="wr_name,1">글쓴이</option>
            <option value="wr_name,0">글쓴이(코)</option>
        </select>

2. /lib/common.lib.php 에서 검색어 추출 부분 수정
function get_sql_search($search_ca_name, $search_field, $search_text, $search_operator='and')
-->

        $op2 = "";
        for ($k=0; $k<count($field); $k++) { // 필드의 수만큼 다중 필드 검색 가능 (필드1+필드2...)
            $str .= $op2;
   //echo $field[$k]."<BR>";
   if (substr($field[$k],0,4)=="inx_") {
    $str .= " ".substr($field[$k],4). "= '$s[$i]' ";
   }
   else {

    switch ($field[$k]) {
     case "mb_id" :
     case "wr_name" :
      $str .= " $field[$k] = '$s[$i]' ";
      break;
     case "wr_hit" :
     case "wr_good" :
     case "wr_nogood" :
      $str .= " $field[$k] >= '$s[$i]' ";
      break;
     // 번호는 해당 검색어에 -1 을 곱함
     case "wr_num" :
      $str .= "$field[$k] = ".((-1)*$s[$i]);
      break;
     // LIKE 보다 INSTR 속도가 빠름
     default :
      if (preg_match("/[a-zA-Z]/", $search_str))
       $str .= "INSTR(LOWER($field[$k]), LOWER('$search_str'))";
      else
       $str .= "INSTR($field[$k], '$search_str')";
      break;
    }
   }
            $op2 = " or ";
        }
        $str .= ")";

댓글목록

등록된 댓글이 없습니다.

그누보드
190 (4/4P)

Search

Copyright © Cmd 명령어 18.221.93.167