채택완료

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

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

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

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

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

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

|

답변 7개 / 댓글 11개

채택된 답변
+20 포인트

단순히 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개

아 만약 50이 들어간게 전부 나오면 되는거라면 like로 해도 되는건가요?
a상품은 사이즈가 50, 100, 150이고 b상품은 100, 150, 200 이라면 사이즈가 100인 상품이 모두 나오면 되는거거든요

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

Copy
$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 .= '&amp;wfrom='.$wfrom.'&amp;wto='.$wto;

답변에 대한 댓글 2개

오메 이렇게 좋은 소스를 ㅠㅠ 제가 퇴근했어서 못봤었네요
근데 그럼 it_5에 50,100,150 이렇게 입력하면 되는건가요?

사이즈가 한개인 경우는 50 이렇게 해놓는데 상관없나요?
Copy
where wr_5 regexp '($stx,|,$stx,|,$stx)'

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

답변에 대한 댓글 1개

아 이걸 추가해주면 되는건가요? 아니면 기존 소스에서 어느 부분을 대체하는건가요? ㅠㅠ

저 완전 무지랭이라 몰라서 그래요 ㅠㅠ 귀찮게 해서 죄송합니다
Copy
$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 .= '&amp;wfrom='.$wfrom.'&amp;wto='.$wto;
 

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

1번 상품 50, 100,150

2번 상품 150, 100, 100 일때

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

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

답변에 대한 댓글 2개

아하 150에 50이 들어가니까 1번 2번 나오는거군요
밑에처럼 수식을 쓰고 있어요 search.php에 ㅠㅠ

어떻게 적용하면 좋을까요?
Copy
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개

이렇게 하면 3개중에 1개가 일치할때 모두 검색이 되는건가요? ㅠㅠ 제가 잘몰라서요

답변에 대한 댓글 3개

like로 검색하면 다중필드에 50, 100 이런식으로 넣어도 검색하면 나오나요?
현재 사이즈로 숫자 검색이라 like로 될지 ㅠㅠ
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' ";
}

이런 수식들을 쓰고 있어서

답변을 작성하려면 로그인이 필요합니다.