그누보드5 search.php에서 계시판 쿼리 만들어내는 부분은 어딘가요?

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
그누보드5 search.php에서 계시판 쿼리 만들어내는 부분은 어딘가요?

QA

그누보드5 search.php에서 계시판 쿼리 만들어내는 부분은 어딘가요?

본문

/list.php는 해당 계시판의 검색창 search.php는 전체 검색창의 검색기능으로 알고 있는데

실제 쿼리를 만들어내는 lib/common.lib.php 파일의 get_sql_search() 함수는 list.php에서만 사용하고

search.php에서는 사용을 안하나 바요.

search.php에서 아래부분이 호출될 당시의 bo_table은 어떻게 가져와야 하는지요?

fulltext공부를 하다보니 bo_table에 따라 쿼리를 달리 만들어야 할거 같아서요.

일단 $bo_table에는 값이 없는거 같네요.

 

    $str = '(';
    for ($i=0; $i<count($s); $i++) {
        if (trim($s[$i]) == '') continue;

        $search_str = $s[$i];

        // 인기검색어
        insert_popular($field, $search_str);

        $str .= $op1;
        $str .= "(";

        $op2 = '';
        // 필드의 수만큼 다중 필드 검색 가능 (필드1+필드2...)
        for ($k=0; $k<count($field); $k++) {
            $str .= $op2;
            switch ($field[$k]) {
                case 'mb_id' :
                case 'wr_name' :
 

이 질문에 댓글 쓰기 :

답변 3

검색부분에 적용 하실 정확한 조건들이 어떻게 되나요?

말씀하신 것을 토대로 한다면 약간 변수를 확장해서 처리 가능한듯 한데요

큰 분기조건이 2가지 정도라면 $sql_search / $sql_search2 로 확장 하시고 원본은 건드리지 않코 

$sql_search2만 확장 해서 처리 가능 해 보입니다.

적요은 


$sql = " select wr_id from {$tmp_write_table} where {$sql_search} ";

해당 부분만 확장처리 하면 되겠네요

// 필드의 수만큼 다중 필드 검색 가능 (필드1+필드2...)
            for ($k=0; $k<count($field); $k++) {
                $str .= $op2;
                switch ($field[$k]) {
                    case 'mb_id' :
                    case 'wr_name' :
                        $str .= "$field[$k] = '$s[$i]'";
                        break;
                    case 'wr_subject' :
                    case 'wr_2' :
                        $_search_str = '"'.$search_str.'*"';
                        if($bo_table=="free" or $bo_table=="note" or $bo_table=="vote")
                                    $str1 = str." MATCH($field[$k]) AGAINST('$_search_str')";
                            else
                                    $str2 = str." INSTR(LOWER($field[$k]), LOWER('$search_str'))";
                        break;
                    default :
                        $str .= "1=0"; // 항상 거짓
                        break;
            }

사실은 이렇게 간단히 $bo_table 에 따라 2가지로만 하면 되는데 결국
조건문 2개를 만들어놓고 각 테이블마다 사용할 조건문 자체 혹은 변수명을 넣어놓고 처리 하는수 밖에 없네요

search.php 파일 33번째~55번째줄 확인해보세요

해당 부분에서 $g5_search['tables'] 로 변수처리 하네요

테이블 별 처리 원하시면 해당 변수로 처리하시면 됩니다

네 KAIKAI 님 일단 성의에 감사드립니다.
search.php는 전체 검색이니 예를들어 30개의 계시판중 전체검색에 관리자가 포함시켜놓은 계시판이 15개라면 15개 테이블명에 대한 리스트가.. $g5_search['tables']라는 배열에 하단에 보면 집에넣는거 같네요.  그럼 하단에    for ($i=0; $i<count($s); $i++) {
 이부분에서 $sql_search 라는 조건문을 bo_table명과는 상관없이 만들어 내고 있는데  이 조건문 만드는 부분을 
 for ($i=0; $i<count($g5_search['tables']); $i++) {
이문장 안으로 옮겨 각 테이블마다 서로다른 조건문을 만들어 g5_search['condition'][] 이라는 배열에 집어넣고... 테이블에따라 wr_subject에 wr_content혹은 wr_2참조가 틀리고 또는 INSTR로 검색할지 MATCH AGAINST 로 검색할지를 결정하고

for ($idx=$table_index; $idx<count($search_table); $idx++) {
}
이분이 출력부분 같은데 여기서 실제 쿼리를 만들어내어 출력해야 한다면 너무많은 소스를 수정해야해서 다른 좋은 방법이 있으면 부탁하겠습니다.
감사합니다.

kaiki님 감사해요 덕분에 조금 간단하고 정리가 됬어요.

 

for($i-0; $i<count($g5_search['tables']); $i++) {
     // iam add modify

    if( $g5_search['tables'][$i]=='free'||$g5_search['tables'][$i]=='note'||$g5_search['tables'][$i]=='vote')
         $sql = " select count(wr_id) as cnt from {$tmp_write_table} where {$sql_search2} ";

    else

        $sql = " select count(wr_id) as cnt from {$tmp_write_table} where {$sql_search} ";

 
    $result = sql_fetch($sql, false);
    $row['cnt'] = (int)$result['cnt'];

답변을 작성하시기 전에 로그인 해주세요.
전체 0
QA 내용 검색

회원로그인

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