여분 필드에 여러개 값을 넣으면..
여분 필드의 5번째를 사이즈로 정해놓고 50 하나만 넣는게 아니라
50,90,100 이렇게 여러개를 넣어도 검색이 되게 할 순 없나요?
현재는 하나씩만 넣고 여분필드를 이용해서 검색 시스템은 완성해 놓은 상태입니다.
다만 필드에 여러 값을 넣는 방법이 없나해서요
답변 7개 / 댓글 11개
단순히 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개
흠 이건 단순검색이 아니라 범위검색이네요??
$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;
답변에 대한 댓글 2개
사이즈가 한개인 경우는 50 이렇게 해놓는데 상관없나요?
where wr_5 regexp '($stx,|,$stx,|,$stx)'
정규식을 사용한 방법이예요. 전 mysql에서 정규식 잘 안써서 정확한지 모르겠네요.
답변에 대한 댓글 1개
저 완전 무지랭이라 몰라서 그래요 ㅠㅠ 귀찮게 해서 죄송합니다
$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;
제가 예를 더 들어드려야겠군요....
1번 상품 50, 100,150
2번 상품 150, 100, 100 일때
사이즈 50을 검색하면 1번만 나와야되죠?
든데 단순 like를 쓰면 1, 2번 다 나옵니다.
답변에 대한 댓글 2개
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개
like로 검색하면 검색되지않나요?
답변에 대한 댓글 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' ";
}
이런 수식들을 쓰고 있어서
답변을 작성하려면 로그인이 필요합니다.