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

여분 필드에 여러개 값을 넣으면 채택완료

블랑숑 8년 전 조회 6,140

여분 필드에 여러개 값을 넣으면..

 

여분 필드의 5번째를 사이즈로 정해놓고 50 하나만 넣는게 아니라

 

50,90,100 이렇게 여러개를 넣어도 검색이 되게 할 순 없나요?

 

현재는 하나씩만 넣고 여분필드를 이용해서 검색 시스템은 완성해 놓은 상태입니다.

 

다만 필드에 여러 값을 넣는 방법이 없나해서요 

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

답변 7개

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

단순히 like 로 검색하게 되면 발생하는 문제

wr_5의 값이

1번 게시물은 50, 100, 150 이고

2번 게시물은 100, 50, 150 이면

 

두번째 50을 검색해서 2번만 나와야하는데

1, 2번 모두 다 나오게 됩니다.

단순히 모든 값이 숫자이고 wr_5에 3개의 값만 들어가고 검색하려는 값이 $stx 일때

 

field like '$stx,%' 첫번째 값 검색

field like '%,$stx,%' 두번째 값 검색

field like ',$stx%' 세번째 값 검색 이럴수도 있습니다.

 

하지만 wr_5에 넣은 값들이 더 다양하다면 다른식으로 쿼리를 만들어야합니다.

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

답변에 대한 댓글 2개

블랑숑
8년 전
아 만약 50이 들어간게 전부 나오면 되는거라면 like로 해도 되는건가요?
블랑숑
8년 전
a상품은 사이즈가 50, 100, 150이고 b상품은 100, 150, 200 이라면 사이즈가 100인 상품이 모두 나오면 되는거거든요

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

IZSOFT
8년 전

흠 이건 단순검색이 아니라 범위검색이네요??

 

</p><p>$wfrom   = isset($_GET['wfrom']) ? preg_replace('/[^0-9]/', '', trim($_GET['wfrom'])) : '';</p><p>$wto     = isset($_GET['wto']) ? preg_replace('/[^0-9]/', '', trim($_GET['wto'])) : '';</p><p> </p><p>if ($it_5)  </p><p>    $where[] = " it_5 regexp '($it_5,|,$it_5,|,$it_5)'";</p><p> </p><p>if ($wfrom && $wto) {</p><p>    $where[] = " ( (SUBSTRING_INDEX(a.it_5,',',1) BETWEEN '$wfrom' AND '$wto') OR (SUBSTRING_INDEX(SUBSTRING_INDEX(a.it_5,',',2),',',-1) BETWEEN '$wfrom' AND '$wto') OR (SUBSTRING_INDEX(a.it_5,',',-1) BETWEEN '$wfrom' AND '$wto') ) ";</p><p>} else if($wfrom) {</p><p>    $where[] = " ( (SUBSTRING_INDEX(a.it_5,',',1) >= '$wfrom') OR (SUBSTRING_INDEX(SUBSTRING_INDEX(a.it_5,',',2),',',-1) >= '$wfrom') OR (SUBSTRING_INDEX(a.it_5,',',-1) >= '$wfrom' ) ) ";</p><p>} else if($wto) {</p><p>    $where[] = " ( (SUBSTRING_INDEX(a.it_5,',',1) <= '$wto') OR (SUBSTRING_INDEX(SUBSTRING_INDEX(a.it_5,',',2),',',-1) <= '$wto') OR (SUBSTRING_INDEX(a.it_5,',',-1) <= '$wto' ) ) ";</p><p>}</p><p> </p><p>if($wfrom && $wto) $query_string .= '&wfrom='.$wfrom.'&wto='.$wto;</p><div>
로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

블랑숑
8년 전
오메 이렇게 좋은 소스를 ㅠㅠ 제가 퇴근했어서 못봤었네요
블랑숑
8년 전
근데 그럼 it_5에 50,100,150 이렇게 입력하면 되는건가요?

사이즈가 한개인 경우는 50 이렇게 해놓는데 상관없나요?

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

IZSOFT
8년 전

</p><p>where wr_5 regexp '($stx,|,$stx,|,$stx)'</p><p>

 

정규식을 사용한 방법이예요. 전 mysql에서 정규식 잘 안써서 정확한지 모르겠네요.

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

답변에 대한 댓글 1개

블랑숑
8년 전
아 이걸 추가해주면 되는건가요? 아니면 기존 소스에서 어느 부분을 대체하는건가요? ㅠㅠ

저 완전 무지랭이라 몰라서 그래요 ㅠㅠ 귀찮게 해서 죄송합니다

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

8년 전

</p><p>$wfrom   = isset($_GET['wfrom']) ? preg_replace('/[^0-9]/', '', trim($_GET['wfrom'])) : '';
$wto     = isset($_GET['wto']) ? preg_replace('/[^0-9]/', '', trim($_GET['wto'])) : '';</p><p> </p><p>if ($it_5)  
    $where[] = " it_5 = '$it_5' ";</p><p> </p><p>if ($wfrom && $wto) {
    $where[] = " a.it_5*1 between '$wfrom' and '$wto' ";
} else if($wfrom) {
    $where[] = " a.it_5*1 >= '$wfrom' ";
} else if($wto) {
    $where[] = " a.it_5*1 <= '$wto' ";
}</p><p> </p><p>if($wfrom && $wto) $query_string .= '&wfrom='.$wfrom.'&wto='.$wto;</p><p>
 

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

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

IZSOFT
8년 전

제가 예를 더 들어드려야겠군요....

1번 상품 50, 100,150

2번 상품 150, 100, 100 일때

 

사이즈 50을 검색하면 1번만 나와야되죠?

든데 단순 like를 쓰면 1, 2번 다 나옵니다.

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

답변에 대한 댓글 2개

블랑숑
8년 전
아하 150에 50이 들어가니까 1번 2번 나오는거군요
블랑숑
8년 전
밑에처럼 수식을 쓰고 있어요 search.php에 ㅠㅠ

어떻게 적용하면 좋을까요?

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

IZSOFT
8년 전

</p><p>WHERE INSTR(SUBSTRING_INDEX(wr_5,',',1), '$stx') // 1번째 값 검색</p><p><span style="font-size: 14.6667px;">WHERE</span><span style="font-size: 14.6667px;"> </span>INSTR(SUBSTRING_INDEX(SUBSTRING_INDEX(wr_5,',',2),',',-1), '$stx') // 2번째 값 검색</p><p><span style="font-size: 14.6667px;">WHERE</span><span style="font-size: 14.6667px;"> </span>INSTR(SUBSTRING_INDEX(wr_5,',',-1), '$stx') // 3번째 값 검색</p><p>

 

근데 이렇게 검색을 하시면 속도가 느려집니다~~~

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

답변에 대한 댓글 1개

블랑숑
8년 전
이렇게 하면 3개중에 1개가 일치할때 모두 검색이 되는건가요? ㅠㅠ 제가 잘몰라서요

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

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

답변에 대한 댓글 3개

블랑숑
8년 전
like로 검색하면 다중필드에 50, 100 이런식으로 넣어도 검색하면 나오나요?
블랑숑
8년 전
현재 사이즈로 숫자 검색이라 like로 될지 ㅠㅠ
블랑숑
8년 전
if ($it_6)
$where[] = " it_6 = '$it_6' ";

if ($hfrom && $hto) {
$where[] = " a.it_6*1 between '$hfrom' and '$hto' ";
} else if($hfrom) {
$where[] = " a.it_6*1 >= '$hfrom' ";
} else if($hto) {
$where[] = " a.it_6*1 <= '$hto' ";
}

이런 수식들을 쓰고 있어서

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

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

로그인