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

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

QA

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

답변 7

본문

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

 

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

 

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

 

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

 

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

이 질문에 댓글 쓰기 :

답변 7

단순히 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에 넣은 값들이 더 다양하다면 다른식으로 쿼리를 만들어야합니다.

like로 검색하면 검색되지않나요?

http://blog.naver.com/hongsun1992/220680537524 

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' ";
}

이런 수식들을 쓰고 있어서


WHERE INSTR(SUBSTRING_INDEX(wr_5,',',1), '$stx') // 1번째 값 검색
WHERE INSTR(SUBSTRING_INDEX(SUBSTRING_INDEX(wr_5,',',2),',',-1), '$stx') // 2번째 값 검색
WHERE INSTR(SUBSTRING_INDEX(wr_5,',',-1), '$stx') // 3번째 값 검색

 

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


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

1번 상품 50, 100,150

2번 상품 150, 100, 100 일때

 

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

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


where wr_5 regexp '($stx,|,$stx,|,$stx)'

 

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

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

 


$wfrom   = isset($_GET['wfrom']) ? preg_replace('/[^0-9]/', '', trim($_GET['wfrom'])) : '';
$wto     = isset($_GET['wto']) ? preg_replace('/[^0-9]/', '', trim($_GET['wto'])) : '';
 
if ($it_5)  
    $where[] = " it_5 regexp '($it_5,|,$it_5,|,$it_5)'";
 
if ($wfrom && $wto) {
    $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') ) ";
} else if($wfrom) {
    $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' ) ) ";
} else if($wto) {
    $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' ) ) ";
}
 
if($wfrom && $wto) $query_string .= '&wfrom='.$wfrom.'&wto='.$wto;

$wfrom   = isset($_GET['wfrom']) ? preg_replace('/[^0-9]/', '', trim($_GET['wfrom'])) : '';
$wto     = isset($_GET['wto']) ? preg_replace('/[^0-9]/', '', trim($_GET['wto'])) : '';
 
if ($it_5)  
    $where[] = " it_5 = '$it_5' ";
 
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' ";
}
 
if($wfrom && $wto) $query_string .= '&wfrom='.$wfrom.'&wto='.$wto;
 
답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
  • 질문이 없습니다.
전체 0
© SIRSOFT
현재 페이지 제일 처음으로