그누보드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 $search_str = $s[$i]; // 인기검색어
insert_popular($field, $search_str); $str .= $op1;
$str .= "("; $op2 = '';
// 필드의 수만큼 다중 필드 검색 가능 (필드1+필드2...)
for ($k=0; $k
답변 3개
검색부분에 적용 하실 정확한 조건들이 어떻게 되나요?
말씀하신 것을 토대로 한다면 약간 변수를 확장해서 처리 가능한듯 한데요
큰 분기조건이 2가지 정도라면 $sql_search / $sql_search2 로 확장 하시고 원본은 건드리지 않코
$sql_search2만 확장 해서 처리 가능 해 보입니다.
적요은
</p>
<p>$sql = " select wr_id from {$tmp_write_table} where {$sql_search} ";</p>
<p>
해당 부분만 확장처리 하면 되겠네요
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
kaiki님 감사해요 덕분에 조금 간단하고 정리가 됬어요.
for($i-0; $i 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'];
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
search.php 파일 33번째~55번째줄 확인해보세요
해당 부분에서 $g5_search['tables'] 로 변수처리 하네요
테이블 별 처리 원하시면 해당 변수로 처리하시면 됩니다
답변에 대한 댓글 1개
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++) {
}
이분이 출력부분 같은데 여기서 실제 쿼리를 만들어내어 출력해야 한다면 너무많은 소스를 수정해야해서 다른 좋은 방법이 있으면 부탁하겠습니다.
감사합니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
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개를 만들어놓고 각 테이블마다 사용할 조건문 자체 혹은 변수명을 넣어놓고 처리 하는수 밖에 없네요