다중조건 검색 관련

다중조건 검색 관련

QA

다중조건 검색 관련

본문

아직 해결을 못하고 있어 한번더 올립니다..

 

지역 선택 > 인원 선택 > 명칭입력 하면 검색이 되어야 하는데요

 


     <div>
				<span class="title">장소검색</span>
				<label for="sido" class="sound_only">장소검색</label>
				<select name="sido" id="sido" class="st">
					<option value="">시.도</option>
					<option value="경기도">경기도</option>
				</select>
				<label for="" class="sound_only">장소검색</label>
				<select name="gugun" id="gugun" class="st">
					<option value="">구.군</option>
					<option value="안성시">안성시</option>
				</select>
			</div>
 
			<div>
				<span class="title2">인원</span>
				<label for="sido" class="sound_only">인원</label>
				<input type="text" name="pe_start" value="" class="text_input" size="6" > ~ <input type="text" name="pe_end" value="" class="text_input" size="6" >
				<span class="title2">명</span>
			   
			</div>
 
			<div>
				<span class="title">명칭</span>
				<label for="stx" class="sound_only">명칭</label>
				<input type="text" name="stx" value="<?php echo $stx; ?>"  required class="text_input" size="45">
			</div> 

 

이렇게 검색이 된 후에

 


$where = " where ";
$sql_search = "";
$stx2 = $sido.' '.$gugun;
$stx3 = $pe_start.' '.$pe_end;
if ($stx != "") {
    if ($sfl != "") {
        $sql_search .= " $where $sfl like '%$stx%' and ca_addr1 like '%$stx2%' or ca_10 BETWEEN '%$pe_start%' AND '%$pe_end%'";
        $where = " and ";
    }
    if ($save_stx != $stx)
        $page = 1;
	
} 

 

이렇게 검색출력이 되는데요

 

"지역"하고 "명칭" 값은 정상적으로 검색이 되는데 인원값이

100~ 200 사이로 검색을 해도 500 으로 등록된 자료가 출력이 되네요..

"지역" 하고 "명칭" 값만 제대로 찾고 있는 것 같습니다..

어디가 잘못된 걸까요.

 

아 그리고.. 인원 입력하는 "pe_start"​ 와  "pe_end" 가 검색될 때 변수가 제대로 주어졌는지.. 모르겠네요

이 질문에 댓글 쓰기 :

답변 3

and와 or가 저렇게 나열되면 당연히 100~200 아닌 값도 나오죠

 경기도 안성시 이거나 100~200 인 것을 찾게되니 경기도 안성시 중에 100~200 아닌 것이 잇으면 다나오죠

 경기도 안성시 중에서 100~200 인 것을 찾는다면 모두 and 

 

$sfl like '%$stx%' and ca_addr1 like '%$stx2%' and  ca_10 BETWEEN '$pe_start' AND '$pe_end' 

 

아.. 말씀대로 하니 조건 다 넣고 하면 되긴 하는데
지역과 명수 입력 안하고 그냥 "신라"라고만 치면 stx 가 먹혀서 신라는 나와야 되는데 안나오네요 ㅠㅠ;;
하나 되니 하나가 안되고 참 ...

그렇게 하려면 검색 조건을 제대로 만들어야죠

if($stx) $sql_sch[]= "INSTR($sfl , '$stx') ";
if($sido && $gugun){
  $stx2 = $sido.' '.$gugun;
  $sql_sch[]= "INSTR(ca_addr1  , '$stx2' ) ";
}
if($pe_start) $sql_sch[]= "ca_10  *1 >= $pe_start "; //100 만 넣으면 100이상 모두 검색
if($pe_end) $sql_sch[]= "ca_10  *1 <= $pe_end "; // 200만 넣으면 200이하 모두 검색 , 둘다 넣으면 100~200

if($sql_sch[0]) $sql_search = implode(" and ", $sql_sch);

100~ 200 사이라는게 100번째와 200번째 사이중에 랜덤으로 하나 라는 뜻인가요?

아니면 100번째와 200번째 사이의 결과를 다 가져오는건가요?​ 

입력한 수치 사이에 자료 검색해서 출력하는거에요
사용자가.. 200명~ 600명 으로 입력햇다면 그 사이의 명수로 입력된 데이터들이 나오는거거든요.
예를 들어 500 명으로 등록된 자료들만 나와야 되는거죠 ..

ca_10 BETWEEN '$pe_start' AND '$pe_end' 

이렇게 함 해보세요. 안되면 따옴표 빼고 해보시구요.

안되는데요 ..^^;;;

http://www.veple.co.kr/

장소검색에서 "경기도 안성시 100~ 300" 이라고 하고 명칭에 "신라" 라고 해서 검색해보시면 ..아실거에요..
하단에 출력 되는데..이름 밑에 500 이라는게 500명 이란건데 100명~300명 사이로 검색하면 나오면 안되면 안되는 자료니까요..
^^;;

네 검색출력 페이지 sql 문입니다.

$where = " where ";
$sql_search = "";
$stx2 = $sido.' '.$gugun;
$stx3 = $pe_start;
$stx4 = $pe_end;

if ($stx != "") {
    if ($sfl != "") {
        $sql_search .= " $where $sfl like '%$stx%' and ca_addr1 like '%$stx2%' or (ca_10 BETWEEN '%$stx3%' AND '%$stx4%') ";

    }
    if ($save_stx != $stx)
        $page = 1;

}



$sql_common = " from {$g5['g5_shop_category_table']} ";
$sql_common .= $sql_search;


// 테이블의 전체 레코드수만 얻음
$sql = " select count(*) as cnt " . $sql_common;
$row = sql_fetch($sql);
$total_count = $row['cnt'];

$rows = 15;
$total_page  = ceil($total_count / $rows);  // 전체 페이지 계산
if ($page < 1) { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함

if (!$sst)
{
    $sst  = "ca_id";
    $sod = "desc";
}
$sql_order = "order by $sst $sod";

// 출력할 레코드를 얻음
$sql  = " select *
            $sql_common
            $sql_order
            limit $from_record, $rows ";
$result = sql_query($sql);



//$qstr = 'page='.$page.'&amp;sort1='.$sort1.'&amp;sort2='.$sort2;
$qstr = $qstr.'&amp;sca='.$sca.'&amp;page='.$page.'&amp;save_stx='.$stx;


아래는 데이터 입력시에..
ca_10 필드입니다.

<tr>
<th scope="row" colspan="2">총 객실 수</td>
<td colspan="3"><input type="text" name="ca_10" value="<?=$ca['ca_10']?>" id="ca_10" class="text_input" size="15"></td>
</tr>

아.. db데이터를 보고싶다고 한거였었는데.. ^^;;
일단 균이님 덕에 해결된듯 싶군요. (역시 고수는 시야가 넓군요. -_-b)

지역,인원은 검색안한경우 검색어만 적용하는걸로 조금 수정해봤습니다. 검증은 못했구요 (죄송.. ^^;;)

$where = " where ";
$sql_search = "";
$ca_addr = $ca_10 = '';
if(trim($sido)) {
$stx2 = $sido.' '.$gugun;
$ca_addr = " and ca_addr1 like '%$stx2%' ";
}
if(trim($pe_start) && trim($pe_end)) {
$ca_10 = " and ca_10 BETWEEN '$pe_start' AND '$pe_end' ";
}
$stx3 = $pe_start.' '.$pe_end;
if ($stx != "") {
    if ($sfl != "") {
        $sql_search .= " $where $sfl like '%$stx%' $ca_addr $ca_10 ";
        $where = " and ";
    }
    if ($save_stx != $stx)
        $page = 1;

}

답변을 작성하시기 전에 로그인 해주세요.
전체 445
QA 내용 검색

회원로그인

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