여분 필드를 이용한 순차적 검색 > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

여분 필드를 이용한 순차적 검색 정보

여분 필드를 이용한 순차적 검색

본문

wr_1, wr_2, wr_3에 각각 숫자 데이터가 들어가 있습니다.

1. wr_1에서 40에 +-2오차 범위로 자료를 검색하고
2. 1에서 검색한 데이터 결과에서 wr_2에서 60에 +-2오차 범위로 자료를 검색
3. 2에서 검색한 데이터 결과에서 wr_3에서 50에 +-2오차 범위로 자료 검색해서 출력

wr_1, wr_2, wr_3 조건에 순차적으로 적합한 데이터를 검색하는 기능을 가지고 싶습니다.

아래 내용과 같이 어떤 분이 질문한 내용을 "kesan"님이 답변한 내용입니다.
kesan님의 답변으로 많은 고민을 했지만, 구문 이해하는 것도 힘든 저로서는 답답만 하네요.
kesan님의 답변도 정확하게 이해를 못하고 있습니다.
구체적으로 설명해 주시면 좋겠습니다. ^^
금전적으로 투자를 해야하는 복잡한 내용인가요;;

---------------------------- 내용 ---------------------------------------
여러가지 방법이 있겠는데요..
좀 복잡하게 설명할게요 님께서 직접 더 간결한 방법을 찾아보시길....

우선 select 에서 wr_1, wr_2, wr_3 의 조건이 들어올테니
list.php 상단에
if(wr_1 또는 wr_2또는  wr_3 값이 있다면) {
$sfl = "";
$stx = "";

if($wr_1){
if($sfl)
$sfl .= "wr_1";
if($stx)
$stx .= $wr_1;
}

if($wr_2){
if($sfl)
$sfl .= "||";
$sfl .= "wr_2";
if($stx)
$stx .= " ";
$stx .= $wr_2;
}

if($wr_3){
if($sfl)
$sfl .= "||";
$sfl .= "wr_3";
if($stx)
$stx .= " ";
$stx .= $wr_3;
}

}
이렇게 $stx 와 $sfl 값을 가공해 줍니다.

bbs/list.php 에 보면 get_sql_search($sca, $sfl, $stx, $sop) 가 있는데요..

common.lib.php에
function get_sql_search($search_ca_name, $search_field, $search_text, $search_operator='and')
의 기능입니다.

for ($k=0; $k<count($field); $k++) { // 필드의 수만큼 다중 필드 검색 가능 (필드1+필드2...)
에서 가공된 || 구분 갯수만큼 검색해 줍니다.

// 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;
여기서 검색 해 주죠..

이건 좀 간단한 처리 방법인데요 단점은 count($field); 에서 알 수 있듯이 검색어 띄어쓰기 한 걸 돌리기 때문에 wr_1의 검색어가 wr_2에도 있을 때도 나옵니다. (아마 그럴겁니다. )

더 정확한 방법을 원하시면
extend 폴더에 파일 하나 만드시고 get_sql_search2$sca, $sfl, $stx, $sop, $wr_1, $wr_2, $wr_3) 을 추가해 $wr_1, 2, 3 에 해당하는 검색내용을 추가해 주세요.

if($wr_1) {
if ($str)
$str .= " and ";
$str .= " wr_1='$wr_1' ;
}
if($wr_2) {
if ($str)
$str .= " and ";
$str .= " wr_2='$wr_2' ;
}
if($wr_3) {
if ($str)
$str .= " and ";
$str .= " wr_3='$wr_3' ;
}
 여러가지 방법이 있겠는데요..
좀 복잡하게 설명할게요 님께서 직접 더 간결한 방법을 찾아보시길....

우선 select 에서 wr_1, wr_2, wr_3 의 조건이 들어올테니
list.php 상단에
if(wr_1 또는 wr_2또는  wr_3 값이 있다면) {
$sfl = "";
$stx = "";

if($wr_1){
if($sfl)
$sfl .= "wr_1";
if($stx)
$stx .= $wr_1;
}

if($wr_2){
if($sfl)
$sfl .= "||";
$sfl .= "wr_2";
if($stx)
$stx .= " ";
$stx .= $wr_2;
}

if($wr_3){
if($sfl)
$sfl .= "||";
$sfl .= "wr_3";
if($stx)
$stx .= " ";
$stx .= $wr_3;
}

}
이렇게 $stx 와 $sfl 값을 가공해 줍니다.

bbs/list.php 에 보면 get_sql_search($sca, $sfl, $stx, $sop) 가 있는데요..

common.lib.php에
function get_sql_search($search_ca_name, $search_field, $search_text, $search_operator='and')
의 기능입니다.

for ($k=0; $k<count($field); $k++) { // 필드의 수만큼 다중 필드 검색 가능 (필드1+필드2...)
에서 가공된 || 구분 갯수만큼 검색해 줍니다.

// 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;
여기서 검색 해 주죠..

이건 좀 간단한 처리 방법인데요 단점은 count($field); 에서 알 수 있듯이 검색어 띄어쓰기 한 걸 돌리기 때문에 wr_1의 검색어가 wr_2에도 있을 때도 나옵니다. (아마 그럴겁니다. )

더 정확한 방법을 원하시면
extend 폴더에 파일 하나 만드시고 get_sql_search2$sca, $sfl, $stx, $sop, $wr_1, $wr_2, $wr_3) 을 추가해 $wr_1, 2, 3 에 해당하는 검색내용을 추가해 주세요.

if($wr_1) {
if ($str)
$str .= " and ";
$str .= " wr_1='$wr_1' ;
}
if($wr_2) {
if ($str)
$str .= " and ";
$str .= " wr_2='$wr_2' ;
}
if($wr_3) {
if ($str)
$str .= " and ";
$str .= " wr_3='$wr_3' ;
}

댓글 전체

전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT