like 또는 instr 셀렉트할때 중복문자열 처리방법? > 그누4 질문답변

그누4 질문답변

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

like 또는 instr 셀렉트할때 중복문자열 처리방법? 정보

like 또는 instr 셀렉트할때 중복문자열 처리방법?

본문

분류다중선택스킨 마무리 작업중인데 " 감 " 따라서 감자,구운감자 모두 올라오네요.

분류에 중복 문자열을 가지고 있는경우 처리방법에서 구분된 특정단어만 비교해서 셀렉트하는 방법이 있을까요?

ca_name 필드에 " 감,감자,구운감자 " 처럼 , 로 구분 입력된 경우입니다.

    //분류정렬
    //ca_name 필드속성 및 속도관련 체크 필요
    //or ca_name like '%" . $sca . "%' 또는 or instr( ca_name, '" . $sca . "') 사용
    $tmp = "";
    $tmp = (isset($sca))?" or instr( ca_name, '" . $sca . "')":" ";
    $sql_search .= " " . $tmp . " and (wr_num between '" . $spt . "' and '" . ($spt + $config[cf_search_part]) . "') ";
  • 복사

댓글 전체

디비 성능이 민감한 것이라면 테이블을 별도로 하나 더 쓰는 것을 권합니다.

게시물 갯수가 많지 않다면야

ca_name에 넣을 때 각 단어가 ,로 구분할 텐데
맨 처음부터 ,로 시작하고 끝에도 ,로 끝난다면

비교할 때 ca_name like '%,$sca,%'
instr( ca_name, ',$sca,')
가 되면 정확한 단어만 고를 수 있습니다.
정확한건 테스트를 해봐야 겠으나, 아래 쿼리를 테스트 해보십시오.

// 컬럼값이 특정 구분자(아래에는 콤마(,))를 가지고 있고, 정확히 일치하는 문자열만 찾고자 할 때 (검색어가 영문이나 숫자만 해당된다면 binary 는 삭제하십시오.

ca_name regexp binary '.*[,]?$sca[,]?.*'
고맙습니다.
$ca_name= implode(',', $multi_ctg);
$ca_name = "," . $ca_name . ",";//분류정렬을 위해 앞뒤에 , 찍어줌
$sql = " update " . $g4['write_prefix'] . $bo_table . " set ca_name='$ca_name' where wr_id='$wr_id'";
sql_query($sql);

그리고
instr( ca_name, '," . $sca . ",')

이런식으로 했는데 잘 되는것 같습니다.

뷰페이지에서 보여줄때 맨앞뒤 ,를 제거해주기만 하면 될듯 합니다.
    if ($is_category){
      echo ($category_name ? "[$view[ca_name]] " : "분류없음");
      }

$view[ca_name]
,풍경,칼라,갯골, => 풍경,칼라,갯골

나중에 별도 테이블로 구현하는 방법에 대한 일강 부탁드립니다.^^
맨앞,뒤 쩜(,) 좀 빼주세요.^^

$view[ca_name]
,풍경,칼라,갯골, => 풍경,칼라,갯골

한번에 처리 가능할것 같은데 영 문맹이라서 빠지긴 빠집니다만, 억지쓰고 있습니다. ㅠㅠ
$ca_name = preg_replace("`^(,)`", "", preg_replace("`(,)$`", "", $view['ca_name']));
$ca_name = preg_replace("(^,)", "", preg_replace("(,$)", "", $view['ca_name']));
어제 말나온김에 들여다보다 거시기를 발견하는 통에 그만 삽자루를 다시.. ㅋㅋ
중요부분은 되었고 표시부분에서,,
억지로 됩니다만 정석이 아닌듯해서 ,,,,,,,
컨닝에는 아무래도 한계가 있기마련인가 봅니다.

그만 맘마먹고 ♨ 좀 식히고 오겠습니다. 호호호~~** ;
© SIRSOFT
현재 페이지 제일 처음으로