본문
Q: 던힐프로스트
http://sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=141854
http://www.poporu.co.kr/home/bbs/search.php?srows=10&sfl=wr_subject%7C%7Cwr_content&sop=and&gr_id=&stx=%C6%B2%B8%B0+%B1%D7%B8%B2+%C3%A3%B1%E2
제가 만들고있는 사이트 인데요
게시물 제목이 틀린그림 찾기 입니다.
검색을 틀린그림찾기 로 하면 나오는데요
틀린 그림 찾기 로 하면 안나와요;
띄어쓰기 네이버 같은데보면
그누보드 로 검색하던지 그누 보드 라고 검색하던지
띄어쓰기를 붙은글자로 인식하는건지 몰라두 둘다 검색결과가 나오는데요
그렇게 수정하려면 무슨파일을 어떻게 수정해야 하는지 혹시 아시는분 계신가요?
A: 로빈아빠
검색부분에서 space 처리하게 하였다,
속도문제상 제목에서만 처리하였고, 내용까지 하려면.
if ($search_operator=="space") { //&&$field[$k]=="wr_subject" 를 빼면된다.
구조상 검색단어만 색상이 바뀌게 되지는 않는다..
페이지 이동시에 문제가 될수도 있다..
" " 을 + 등으로 수정할 필요가 있다..
1. list.skin.php 검색부분수정
<input type="radio" name="sop" value="and">and
<input type="radio" name="sop" value="or">or
<input type="radio" name="sop" value="space">공백무시
2. /lib/common.lib.php 에서
// 검색 구문을 얻는다.
//function get_sql_search($search_ca_name, $search_field, $search_text, $search_operator=false)
function get_sql_search($search_ca_name, $search_field, $search_text, $search_operator='and')
{
global $g4;
$str = "";
$str = "";
if ($g4[search_str]) $str=$g4[search_str];
if ($search_ca_name) {
if ($str) $str .= " and ";
$str .= "ca_name = '$search_ca_name' ";
}
$search_text = trim($search_text);
if (!$search_text)
return $str;
if ($str)
$str .= " and ";
// 쿼리의 속도를 높이기 위하여 ( ) 는 최소화 한다.
$op1 = "";
// 검색어를 구분자로 나눈다. 여기서는 공백
$s = array();
if ($search_operator="space") $s=array($search_text); //공백무시 검색
else $s = explode(" ", $search_text);
// 검색필드를 구분자로 나눈다. 여기서는 +
//$field = array();
//$field = explode("||", trim($search_field));
$tmp = array();
$tmp = explode(",", trim($search_field));
$field = explode("||", $tmp[0]);
$not_comment = $tmp[1];
$str .= "(";
for ($i=0; $i<count($s); $i++) {
// 검색어
$search_str = trim($s[$i]);
if ($search_str == "") continue;
// 인기검색어
$sql = " insert into $g4[popular_table] set pp_word = '$search_str', pp_date = '$g4[time_ymd]', pp_ip = '$_SERVER[REMOTE_ADDR]' ";
sql_query($sql, FALSE);
$str .= $op1;
$str .= "(";
$op2 = "";
for ($k=0; $k<count($field); $k++) { // 필드의 수만큼 다중 필드 검색 가능 (필드1+필드2...)
$str .= $op2;
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 :
echo $search_operator;
if ($search_operator=="space"&&$field[$k]=="wr_subject") {
$search_str2=str_replace(" ","",$search_str);
if (preg_match("/[a-zA-Z]/", $search_str))
$str .= "INSTR(LOWER(REPLACE($field[$k],' ','')), LOWER('$search_str2'))";
else
$str .= "INSTR(REPLACE($field[$k],' ',''), '$search_str2')";
}
else {
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 .= ")";
//$op1 = ($search_operator) ? ' and ' : ' or ';
$op1 = " $search_operator ";
}
$str .= " ) ";
if ($not_comment)
$str .= " and wr_is_comment = '0' ";
return $str;
}
댓글목록
등록된 댓글이 없습니다.