채택완료

다중 검색 관련

wr_3 의 선택값이 '3년이상' 이면 그 위로 등록된 값(5,7,10,12년이상  등등등)들은 다 검색되게 할려고 합니다.

검색시에 선택값에 포함된  숫자보다 높으면 다 출력하라.. 라고 검색구문에 if문을 넣어야 할것 같은데요..

막막하네요..

 

 

Copy
// 추가 및 변경 함수 시작$arr_search = array();for($j = 1; $j < 11; $j++){	if($_GET["wr_".$j] && strlen($_GET["wr_".$j]) > 0){		$qstr .= "&wr_".$j."=".urlencode($_GET["wr_".$j]);	}} // 검색 구문을 얻는다.//function get_sql_search($search_ca_name, $search_field, $search_text, $search_operator=false)function get_sql_search2($search_ca_name, $search_field, $search_text, $search_operator='and',$search_arr=''){    global $g5;     $str = "";		    if ($search_ca_name)        $str = " ca_name = '$search_ca_name' ";     $search_text = trim($search_text);     if (!$search_text && !$search_arr)        return $str;		if(count($search_arr[name]) > 0){			$se_flag = 0;			for($j = 0; $j < count($search_arr[name]); $j++){				//print_r2($search_arr);				if(is_array($search_arr[val][$j])){ 					$str2 = ""; 					for($x = 0; $x < count($search_arr[val][$j]);$x++){						$str2 = append_sql($str2, " or ", " {$search_arr[name][$j]} like '%{$search_arr[val][$j][$x]}%' ");					}					$str2 = " (".$str2.") ";					$str = append_sql($str, " and", $str2);  				}else if(strlen($search_arr[val][$j]) > 0 && $search_arr[val][$j] ){					$str = append_sql($str, " and ", " {$search_arr[name][$j]}  = '{$search_arr[val][$j]}' ");				}			}		}		    // 쿼리의 속도를 높이기 위하여 ( ) 는 최소화 한다.    $op1 = "";     // 검색어를 구분자로 나눈다. 여기서는 공백    $s = array();     $s = explode(" ", $search_text);		if(count($s) > 0 && strlen($s[0]) > 0 ){ 			if ($str)        $str .= " and ";    // 검색필드를 구분자로 나눈다. 여기서는 +    //$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 $g5[popular_table] set pp_word = '$search_str', pp_date = '$g5[time_ymd]', pp_ip = '$_SERVER[REMOTE_ADDR]' ";        sql_query($sql, FALSE);				*/				if(count($field) > 0){        $str .= $op1;        $str .= "(";         $op2 = "";        for ($k=0; $k<count($field); $k++) { // 필드의 수만큼 다중 필드 검색 가능 (필드1+필드2...)            $str .= $op2;            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 .= ")";				}		        //$op1 = ($search_operator) ? ' and ' : ' or ';        $op1 = " $search_operator ";    }     $str .= " ) ";		}    if ($not_comment){        $str .= " and wr_is_comment = '0' ";		}	    return $str;} function append_sql($sql, $appender, $text) {	if(strlen($sql) > 0) {		$sql = $sql.$appender.$text;	} else {		$sql = $text;	}	return $sql;}// 추가 및 변경 함수 끝

 

 

Copy
<select name="wr_3" id="wr_3" style="padding:3px; border:1px solid #ccc; width:20%">        		<option value="">경력</option>		<option value="1년이상" <?if ($wr_3 == '1년이상') echo "selected" ?>>1년이상</option>		<option value="3년이상" <?if ($wr_3 == '3년이상') echo "selected" ?>>3년이상</option>		<option value="5년이상" <?if ($wr_3 == '5년이상') echo "selected" ?>>5년이상</option>		<option value="7년이상" <?if ($wr_3 == '7년이상') echo "selected" ?>>7년이상</option>		<option value="10년이상" <?if ($wr_3 == '10년이상') echo "selected" ?>>10년이상</option>		<option value="12년이상" <?if ($wr_3 == '12년이상') echo "selected" ?>>12년이상</option>		<option value="15년이상" <?if ($wr_3 == '15년이상') echo "selected" ?>>15년이상</option>		<option value="17년이상" <?if ($wr_3 == '17년이상') echo "selected" ?>>17년이상</option>		<option value="20년이상" <?if ($wr_3 == '20년이상') echo "selected" ?>>20년이상</option>		<option value="25년이상" <?if ($wr_3 == '25년이상') echo "selected" ?>>25년이상</option>		<option value="30년이상" <?if ($wr_3 == '30년이상') echo "selected" ?>>30년이상</option>            </select>
|

답변 1개 / 댓글 1개

채택된 답변
+20 포인트

위에 제시된 소스에서 get_sql_search2 함수의 내용중에

100, 101번째 줄의 내용을 아래와 같이 수정하면 되지 않을까요.

 

단일 필드에서 다중 키워드로 테스트할 때 잘 되는 것을 확인했음.

 

수정 전(100, 101번째 줄)

Copy
else    $str .= "INSTR($field[$k], '$search_str')";


수정 후(100, 101번째 줄)

Copy
else {   if(strstr($field[$k], '년이상')){      $search_str = preg_replace("/[^0-9]*/s", "", $search_str);      $field_str = explode('년이상', trim($field[$k]));       $str .= "(";      $str_add = "";      foreach($field_str as $val){         $num = preg_replace("/[^0-9]*/s", "", $val);         if($num >= $search_str) {            $num = $num.'년이상';           $str_add .= "INSTR($field[$k], '$num') or ";         }      }      $str .= substr($str_add, 0, -3);      $str .= ")";   } else {      $str .= "INSTR($field[$k], '$search_str')";    }}​
 

답변에 대한 댓글 1개

Parse error: syntax error, unexpected T_BREAK in /home/user/junkiin0/public_html/theme/basic/skin/board/job_gujik/lib/skin.lib.php on line

이런 오류가 나네요...
-------------------------------------------------------------------------

else
if(strstr($field[$k], '년이상')){
$search_str = preg_replace("/[^0-9]*/s", "", $search_str);
$field_str = explode('년이상', trim($field[$k]));

$str .= "(";
$str_add = "";
foreach($field_str as $val){
$num = preg_replace("/[^0-9]*/s", "", $val);
if($num >= $search_str) {
$num = $num.'년이상';
$str_add .= "INSTR($field[$k], '$num') or ";
}
}
$str .= substr($str_add, 0, -3);
$str .= ")";
} else {
$str .= "INSTR($field[$k], '$search_str')";
}
-------------------------------------------------------------------------------

게 하면 오류는 나지 않지만.. 여전히 예를들어 3년이상 으로 검색을 해도 그 위로 등록된 값은 나오지는 않고 해당 년도값만 나오네요..

답변을 작성하려면 로그인이 필요합니다.