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

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

QA

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

본문

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

 

여분 필드의 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;
 
답변을 작성하시기 전에 로그인 해주세요.
전체 16,770
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT