테스트 사이트 - 개발 중인 베타 버전입니다

쪼개진 여분필드 검색문의드립니다!!! 채택완료

우주빛 7년 전 조회 3,046

안녕하세요~ 게시판 리스트 검색작업중인데 도저히 해결이 안되는 부분이 있어서 문의드립니다

 

 

예를 들어서 여분필드 wr_1 란에 콤마(,)를 이용해서

게시물1번에는 사과,딸기,배...

게시물 2번에는 빨간사과,멜론,수박...

 

이렇게 여러단어를 입력해서 등록을 했을 경우(여분필드 쪼개서 사용)

 

게시판 목록에서 "사과"를 검색하면 정확히 "사과"라는 단어만 검색하려면 어떻게 해야하나요?

 

지금 리스트 검색부분에 sfl을 wr_1로 지정해놓았구요

사과를 검색하면 게시물 1번만 검색되서 나와야 하는데

 

게시물 2번에도 빨간사과가 등록되어 있기 때문에

게시물 1번, 2번이 모두 결과로 나오고 있습니다.

 

 

 

lib/common.lib.php 파일내에서

 

case "wr_1" : 

       if (preg_match("/[a-zA-Z]/", $search_str))                     $str .= "LOWER($field[$k]=LOWER('$search_str')";                      else                     $str .= "$field[$k]= '$search_str' ";          break; 

 

이런식으로 일치하도록 지정하는건 질답게시판에서 배웠는데

이 여분필드가 쪼개져있을떄 구분자별 일치단어를 지정하려면 어떻게 해야 할까요??

 

$w1 = explode(",", $list[$i]['wr_1']);                 $w1_1 = $wr1[0];                 $w1_2 = $wr1[1];                 $w1_3 = $wr1[2];                 $w1_4 = $wr1[3];                 $w1_5 = $wr1[4];                 $w1_6 = $wr1[5];                 $w1_7 = $wr1[6];                 $w1_8 = $wr1[7]; echo $w1_1;

 

 

요런식으로 쪼갠값들을 지정해주면 될것 같은데

아무리해봐도 안되서요~~ㅜㅜ

 

 

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

답변 4개

채택된 답변
+20 포인트
7년 전

위 case문에서 if~else~ 모두 지우고

$str .= "FIND_IN_SET('$search_str' , wr_1) > 0 ";

 

mysql 버젼이 낮으면 안 됩니다 ( < 5.6 ??)

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

우주빛
7년 전
균이님~ 답변감사합니다!!
답변해주신대로 해봤는데 버전이 낮아서 안되는거 같아요ㅠㅠ
낮은버전에서 사용할 수 있는 방법은 없을까요??
우주빛
7년 전
구분자를 ','로 바꿔서 저장하고
$str .= "FIND_IN_SET('$search_str' , wr_1) > 0 ";

로 했더니 잘됩니다~!!!
감사합니다!!!ㅜㅜㅜㅜㅜㅜㅜㅜㅜ

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

7년 전

하위버젼에서 아래처럼 하면 됩니다. 참고 하세요(모르는 분이 보여서....)

 

str.="SUBSTRING_INDEX(wr_1, ',' , 1) ='$search_str' or SUBSTRING_INDEX(wr_1, ',' , -1) ='$search_str'  or INSTR(wr_1 , ',{$search_str},') ";

 

처음 설계할 때 검색이 필요한 값이라면 저렇게 한 필드에 구겨 넣도록 하는 것은 속도면에서도

좋지않을테니 필드를 각각 만들고 index넣고 하는 것이 좋을 것입니다

 

로그인 후 평가할 수 있습니다

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

SELECT * FROM #table WHERE FIND_IN_SET("사과", wr_1) <> 0

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

우주빛
7년 전
답변감사합니다~!!!
답변주신 부분을 common.lib.php 에다가 넣는건가요?
저 사과 라는 부분을 함수로 어떻게 표현하는건지요??ㅜㅜ

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

P
7년 전

현재 필드 저장방법으로는 정확하게 검색이 불가능합니다.

 

,사과,,딸기,,배,

 

혹은

 

,사과,딸기,배,

 

와 같이 시작과 끝에 구분자를 넣게 되신다면, 그때는 가능할거라 생각합니다.

 

구분자를 양끝에 넣고 저장하신 경우에는 ,사과, 로 검색(like)하시면, 딱 사과만 검색이 되어 나오게 됩니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

우주빛
7년 전
답변감사합니다~~!!ㅜㅜ
구분자를
|사과||배||딸기|
이런식으로 양끝에 넣어서 저장했는데 저 구분자를 뺀 함수를 어떻게 구현해야 하는지
감이 안오네요..ㅠㅠ

common.lib.php 파일에서 어떻게 하나씩 떼서 인식하게 할 수 있을까요??ㅜㅜ

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

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

로그인