여분 필드에 여러개 값을 넣으면
본문
여분 필드에 여러개 값을 넣으면..
여분 필드의 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에 넣은 값들이 더 다양하다면 다른식으로 쿼리를 만들어야합니다.
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;
답변을 작성하시기 전에 로그인 해주세요.