답변 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에 넣은 값들이 더 다양하다면 다른식으로 쿼리를 만들어야합니다.
답변에 대한 댓글 2개
댓글을 작성하려면 로그인이 필요합니다.
흠 이건 단순검색이 아니라 범위검색이네요??
</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개
사이즈가 한개인 경우는 50 이렇게 해놓는데 상관없나요?
댓글을 작성하려면 로그인이 필요합니다.
</p><p>where wr_5 regexp '($stx,|,$stx,|,$stx)'</p><p>
정규식을 사용한 방법이예요. 전 mysql에서 정규식 잘 안써서 정확한지 모르겠네요.
답변에 대한 댓글 1개
저 완전 무지랭이라 몰라서 그래요 ㅠㅠ 귀찮게 해서 죄송합니다
댓글을 작성하려면 로그인이 필요합니다.
</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>
댓글을 작성하려면 로그인이 필요합니다.
제가 예를 더 들어드려야겠군요....
1번 상품 50, 100,150
2번 상품 150, 100, 100 일때
사이즈 50을 검색하면 1번만 나와야되죠?
든데 단순 like를 쓰면 1, 2번 다 나옵니다.
답변에 대한 댓글 2개
어떻게 적용하면 좋을까요?
댓글을 작성하려면 로그인이 필요합니다.
</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개
댓글을 작성하려면 로그인이 필요합니다.
like로 검색하면 검색되지않나요?
http://blog.naver.com/hongsun1992/220680537524">http://blog.naver.com/hongsun1992/220680537524
답변에 대한 댓글 3개
$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' ";
}
이런 수식들을 쓰고 있어서
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인