구간 검색 between ~ and 구문이 맞나요?

구간 검색 between ~ and 구문이 맞나요?

QA

구간 검색 between ~ and 구문이 맞나요?

본문

구간 검색 between ~ and 구문이 맞나요?

 

wr_3에 있는 데이터 과 wr_4에 있는 데이터 사이를 검색하려고 

합니다. 감사합니다.

 

=========================================

if ($wr_3 && $wr_4)
    $sql_search .= " and wr_3 between '{$wr_3}' and '{$wr_4}' ";

 

======================================

이 질문에 댓글 쓰기 :

답변 7

bbs list.php

 

1번 수정

// 분류 선택 또는 검색어가 있다면
$stx = trim($stx);
if ($sca || $stx || $t_start || $t_end || count($arr_search) > 0) {
    
        $se_arr = array();
        $se_arr = $arr_search;

        if ($sca || $stx || count($arr_search) > 0)
          $sql_search = get_sql_search3($sca, $sfl, $stx, $sop, $se_arr);

        if ($t_start || $t_end) {
          if ($sql_search)
            $sql_search .= " and wr_1 >= '$t_start' && wr_1 <= '$t_end'";
          else
            $sql_search = " wr_1 >= '$t_start' && wr_1 <= '$t_end'";
        }

    // 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
    $sql = " select MIN(wr_num) as min_wr_num from {$write_table} ";
    $row = sql_fetch($sql);
    $min_spt = (int)$row['min_wr_num'];

    if (!$spt) $spt = $min_spt;

    $sql_search .= " and (wr_num between {$spt} and ({$spt} + {$config['cf_search_part']})) ";

     // 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
    // 라엘님 제안 코드로 대체 http://sir.kr/g5_bug/2922

    $sql = "SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM {$write_table} WHERE {$sql_search} ";
    $row = sql_fetch($sql);
    $total_count = $row['cnt'];
 

 

2번수정

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

if($_GET[sst] == "wr_9"){
    $sql_order = " order by wr_9 asc ";
}
if ($sca || $stx || $t_start || $t_end || count($arr_search) > 0) {
    if ($sca || $stx || count($arr_search) > 0)
      $sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";
    if ($t_start || $t_end) {
       $sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";
    }     

    

 

3번 수정

// 페이지의 공지개수가 목록수 보다 작을 때만 실행
if($page_rows > 0) {
    $result = sql_query($sql);

    $k = 0;

    while ($row = sql_fetch_array($result))
    {
        

        if ($sca || $stx || $t_start || $t_end || count($arr_search) > 0) {
            if ($sca || $stx || count($arr_search) > 0)
              $row = sql_fetch(" select * from {$write_table} where wr_id = '{$row['wr_parent']}' ");
            if ($t_start || $t_end) {
               $row = sql_fetch(" select * from {$write_table} where wr_id = '{$row['wr_parent']}' ");
            }     
             
        } 
        
        $list[$i] = get_list($row, $board, $board_skin_url, G5_IS_MOBILE ? $board['bo_mobile_subject_len'] : $board['bo_subject_len']);
        if (strstr($sfl, 'subject')) {
            $list[$i]['subject'] = search_font($stx, $list[$i]['subject']);
        }
        $list[$i]['is_notice'] = false;
        $list_num = $total_count - ($page - 1) * $list_page_rows - $notice_count;
        $list[$i]['num'] = $list_num - $k;

        $i++;
        $k++;
    }
}

 

 

 

list.skin.php

<input class="list_input2" style="width:100px" autocomplete="off" type="t_start" id="t_start" name='t_start'  value='<?=$t_start?>'  placeholder="시작일" >-
                <input class="list_input2" style="width:100px" autocomplete="off" type="t_end" id="t_end" name='t_end' value='<?=$t_end?>' placeholder="종료일"> 

 

전 날짜로 넣었는데 수정해서 사용하시면 될꺼같네요

a~b 사이에 있는 애들 검색하는 부분입니다.

여분필드 wr_1 기준입니다.

 

 

 

 

 

 

질문을 정확히 하시면 답변하시는분도 이해가 좋을거같네요

이렇게 하시면 되겠네요.

 

if ($wr_3 && $wr_4) 
    $sql_search .= " and ( wr_3 >= '$wr_3' and wr_4 <= '$wr_4' ) ";

 

날고픈쭈니님, 답변 감사합니다.

bbs/list.php 에 넣었습니다.

if ($wr_3 && $wr_4)
    $sql_search .= " and ( wr_3 >= '$wr_3' and wr_4 <= '$wr_4' ) ";

그런데 작동을 안합니다. 제가 list.skin.php 의 폼에서 무엇을 잘못 했나요?

========================================================
<form name="fsearch" method="get" class="mbr-form form-with-styler" data-form-title="Form Name">
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
<input type="hidden" name="sop" value="and">
<label for="sfl" class="sound_only">검색대상</label>


<div data-for="wr_3" class="col-lg-6 col-md-12 col-sm-12 form-group">
<select name="wr_3" data-form-field="wr_3" class="form-control display-7" id="wr_3" onchange="detailSearchTon(this.value);">

<option value="">톤수선택부터</option>
                                <option value='1'>1톤</option>
                                <option value='1.2'>1.2톤</option>
                                <option value='2.5'>2.5톤</option>
                                <option value='3.5'>3.5톤</option>
       
</select>
<script>$("#wr_3").val("<?=$_GET[wr_3]?>")</script>


<select name="wr_4" data-form-field="wr_4" class="form-control display-7" >

                                <option value="">톤수선택까지</option>                               
                                <option value='1'>1톤</option>
                                <option value='1.2'>1.2톤</option>
                                <option value='2.5'>2.5톤</option>
                                <option value='3.5'>3.5톤</option>


<div class="col-auto">
<button type="submit" class="btn btn-primary display-7" id="btn05">Submit</button>
</div>


<script>

function detailSearchTon(value) {
if(value == "") {
document.getElementsByName("wr_4")[0].value = "";
return;
}
if(value == 99) {
document.getElementsByName("wr_4")[0].value = 99;
return;
}
var obj = document.getElementsByName("wr_4")[0];
for(var i = 0; i < obj.length; i ++) {
if(obj[i].value == value) {
if(value != 4.5) obj[i].selected = true;
else obj[i + 7].selected = true;
return;
}
}
}

function detailSearchYM(key, value) {
var sYear = Math.round(document.getElementsByName("eight11")[0].value);
var eYear = Math.round(document.getElementsByName("eight12")[0].value);
if(key == 1) { // 시작년
if(sYear > eYear) eYear = sYear;
} else if(key == 3) { // 종료년
if(!sYear) sYear = eYear;
if(sYear > eYear) sYear = eYear;
}
document.getElementsByName("eight11")[0].value = sYear;
document.getElementsByName("eight12")[0].value = eYear;
}

</script>

여담이지만 and wr_3 between 문장이 보이지 않는 걸로 봐서

if 구문이 동작하지 않은거 같습니다.

if 안의 문장이 참인지 검증을 하셔야 할거 같고...

그전에 wr_3, wr_4 값이 잘 넘어 왔는지 부터 확인해 보셔야 할 거 같습니다.

톤수 정보는 어디에 들어있나요?

 

톤수를 wr_3,wr_4로 범위를 넘기시는거 같은데

 

실제 DB에 저장된 톤수정보의 대상은 무엇인지 모호하네요

 

SELECT 태그의 wr_3,4 로 넘기는 범위의 이름이 

실제 db에도 그렇게 들어가 있다면

 

다중 필드를 검색해야 합니다만

 

그런것 같진 않아보이구요

 

db에 톤수정보가 들어간 필드 between 넘겨받은 wr_3 and 넘겨받은 wr_4 

의 구조가 되면 범위는 맞습니다

답변 감사합니다. 안되네요.

혹시 이렇게 해도 되나요?

 

if ($wr_3 && $wr_4)
    $sql_search .= " and wr_3 between 1 and 99 ";

$sql_search 를 따라 가시다 보면
$sql 을 만나시게 될 겁니다.
보통은 'echo $sql;' 로 확인해서 구문상의 이상 유무를 확인하는데요.
쿼리문에 대한 기본 지직이 없으시다면
바로 아래 보면 'sql_query($sql);' 이 보이실겁니다.
이것에다가 오류를 보기 위해 'true' 를 추가해 주세요.


sql_query($sql, true);

그러면 해당 구문에 오류가 보일겁니다.
그 오류를 들고 질답방에 질문을 올려 보세요.
아마도 답변 받는데 무리가 없을 겁니다.

echo $sql; 했습니다. 아래와 같은 메시지가 나오네요. ㅠㅠ

 

SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM g55419_write_consult_buying WHERE wr_3 like '%1%' and wr_4 like '%5%' and (wr_num between -1 and (-1 + 10000))

echo $sql; 결과인 문장상의 이상은 없어 보입니다.
원하시는 구간 관련 문장이
wr_num between -1 and (-1+10000) 인가요?
아마도 아니지 싶습니다.
-1과 (-1+10000) 부분에 님께서 원하시는 구간의 값들이 들어가야
정상적인 결과를 얻을 수 있을 겁니다.

애석하게도 여기까지입니다.
더 이상은 직접 만들어 드리는 것과 다름이 없습니다.
아마도 냑에서 어느 누구도 그냥은 만들어 주시지 않을겁니다.
시간이 남아도는 맘 좋은 분이 있다면 또 모를까요?

답답하고 고생스럽고 스트레스 쌓이는 그 심정 이해 합니다.

하지만 때로는 그런 것들과 다른 사람의 노력에 대한 댓가와 저울질 해야 하는 때가 있습니다.
제가 보기엔 지금이 그 때인거 같구요.

냑에 가입하신지도 오래 되신거 같습니다.
언젠가는 해결이 될지도 모르겠지만 그 언젠가가 언제가 될지 걱정이 됩니다.
부디 좋은 판단을 하시길 바랍니다.
오지랖을 너무 떤거 같습니다.  오해 없으셨으면 하고 기분 상하는일 없으셨음 합니다.
그래도 기분이 좋지 않으시다면
먼저 사과 드립니다.

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

회원로그인

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