아직 해결을 못하고 있어 한번더 올립니다..
지역 선택 > 인원 선택 > 명칭입력 하면 검색이 되어야 하는데요
<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개 / 댓글 9개
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'
답변에 대한 댓글 3개
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);
ca_10 BETWEEN '$pe_start' AND '$pe_end'
이렇게 함 해보세요. 안되면 따옴표 빼고 해보시구요.
답변에 대한 댓글 5개
http://www.veple.co.kr/
장소검색에서 "경기도 안성시 100~ 300" 이라고 하고 명칭에 "신라" 라고 해서 검색해보시면 ..아실거에요..
하단에 출력 되는데..이름 밑에 500 이라는게 500명 이란건데 100명~300명 사이로 검색하면 나오면 안되면 안되는 자료니까요..
^^;;
또는 ca_10 필드의 값들 몇개만이라도요.. ca_10의 자료형은 varchar인가요?
$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.'&sort1='.$sort1.'&sort2='.$sort2;
$qstr = $qstr.'&sca='.$sca.'&page='.$page.'&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>
일단 균이님 덕에 해결된듯 싶군요. (역시 고수는 시야가 넓군요. -_-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;
}
100~ 200 사이라는게 100번째와 200번째 사이중에 랜덤으로 하나 라는 뜻인가요?
아니면 100번째와 200번째 사이의 결과를 다 가져오는건가요?
답변에 대한 댓글 1개
사용자가.. 200명~ 600명 으로 입력햇다면 그 사이의 명수로 입력된 데이터들이 나오는거거든요.
예를 들어 500 명으로 등록된 자료들만 나와야 되는거죠 ..
답변을 작성하려면 로그인이 필요합니다.
지역과 명수 입력 안하고 그냥 "신라"라고만 치면 stx 가 먹혀서 신라는 나와야 되는데 안나오네요 ㅠㅠ;;
하나 되니 하나가 안되고 참 ...