날짜 검색 질문드립니다. (다시질문.ㅠ)
본문
안녕하세요.
아래에서도 질문을 드렸었는데요..
날짜 검색을 여기저기 참고해서 만들었습니다.
소스는 아래와 같습니다.
bbs/list.php 에 추가
if($s_Date && $e_Date) {
$sql_datet .= " and left(wr_datetime, 10) between '{$s_Date}' and '{$e_Date}' ";
}
if ($is_search_bbs) {
$sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_datet} {$sql_order} limit {$from_record}, $page_rows ";
} else {
$sql = " select * from {$write_table} where wr_is_comment = 0 {$sql_datet}";
if(!empty($notice_array))
$sql .= " and wr_id not in (".implode(', ', $notice_array).") ";
$sql .= " {$sql_order} limit {$from_record}, $page_rows ";
}
list.skin.php에 추가
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="//code.jquery.com/ui/1.8.18/jquery-ui.min.js"></script>
<script>
$.datepicker.setDefaults({
dateFormat: 'yy-mm',
prevText: '이전 달',
nextText: '다음 달',
monthNames: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],
monthNamesShort: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],
dayNames: ['일', '월', '화', '수', '목', '금', '토'],
dayNamesShort: ['일', '월', '화', '수', '목', '금', '토'],
dayNamesMin: ['일', '월', '화', '수', '목', '금', '토'],
showMonthAfterYear: true,
yearSuffix: '년'
});
$(function() {
$("#s_Date, #e_Date").datepicker({
dateFormat: 'yy-mm-dd'
});
});
</script>
<form name="fsearch" method="get">
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
<input type="hidden" name="sca" value="<?php echo $sca ?>">
<input type="hidden" name="sop" value="and">
<input type="hidden" name="sfl" value="wr_datetime"<?php echo get_selected($sfl, 'wr_datetime'); ?>>
<input type="text" name="s_Date" id="s_Date" autocomplete="off">~<input type="text" name="e_Date" id="e_Date" autocomplete="off">
<button type="submit" value="검색" class="sch_btn"><i class="fa fa-search" aria-hidden="true"></i><span class="sound_only">검색</span></button>
</form>
이렇게 해서 기능은 정상적으로 잘 동작을 하는데요..
문제는
결과는 3건인데
하단에 페이징 리스트가 나옵니다.
2페이지 눌러보면 상관없는 게시물이 그대로 나와버리더라구요..
bbs/list.php 에서 뭔가를 해줘야 할 것 같은데
검색해도 나오지 않아서 이렇게 다시 질문올려봅니다.
도와주십시오..ㅠ
!-->답변 4
$sql_datet관련 코드 삭제, 모든 것을 원본대로 돌리고 더음 코드만 추가 수정하세요
if ($sca || $stx || $stx === '0' || ($s_Date && $e_Date)) { //검색이면
$is_search_bbs = true; //검색구분변수 true 지정
$sql_search = get_sql_search($sca, $sfl, $stx, $sop);
if(!$sql_search || $sql_search =='0') $sql_search ='';
if($s_Date && $e_Date){
if($sql_search) $sql_search .= " and ";
$sql_search .= " wr_datetime between '$s_Date 00:00:00' and '$e_Date 23:59:59' ";
$qstr.="&e_Date=$e_Date&s_Date=$s_Date";
}
bbs/list.php
이부분은 원본 그대로 유지하고
if ($is_search_bbs) {
$sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";
} else {
$sql = " select * from {$write_table} where wr_is_comment = 0 ";
if(!empty($notice_array))
$sql .= " and wr_id not in (".implode(', ', $notice_array).") ";
$sql .= " {$sql_order} limit {$from_record}, $page_rows ";
}
이부분이 다음과 같이 수정되어야 할것 같습니다.
// ------------------------------------------- 추가
$sql_datet = '';
if ($s_Date && $e_Date) {
$sql_datet .= " and left(wr_datetime, 10) between '{$s_Date}' and '{$e_Date}' ";
}
// ------------------------------------------- 추가
if ($sca || $stx || $stx === '0') { //검색이면
$is_search_bbs = true; //검색구분변수 true 지정
$sql_search = get_sql_search($sca, $sfl, $stx, $sop);
// 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
$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']})) "
$sql_search .= " and (wr_num between {$spt} and ({$spt} + {$config['cf_search_part']})) {$sql_datet} ";
// 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
// 라엘님 제안 코드로 대체 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'];
/*
$sql = " select distinct wr_parent from {$write_table} where {$sql_search} ";
$result = sql_query($sql);
$total_count = sql_num_rows($result);
*/
} else {
$sql_search = "";
$total_count = $board['bo_count_write'];
}
list.skin.php
<form name="fsearch" method="get">
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
<input type="hidden" name="sca" value="<?php echo $sca ?>">
<input type="hidden" name="sop" value="and">
<label for="sfl" class="sound_only">검색대상</label>
<select name="sfl" id="sfl">
<?php echo get_board_sfl_select_options($sfl); ?>
</select>
<!-- <input type="hidden" name="sfl" value="wr_datetime"<?php // echo get_selected($sfl, 'wr_datetime'); ?>> -->
<input type="text" name="s_Date" id="s_Date" autocomplete="off">~<input type="text" name="e_Date" id="e_Date" autocomplete="off">
...
</form>
쿼리 echo $sql; 이렇게 찍으면 뭐라 나와요
bbs/list.php 에 아래소스를 추가해서.. 전체 페이지수를 다시 구해야 합니다.
$sql = " SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM {$write_table} WHERE {$sql_search} {$sql_datet}";
$row = sql_fetch($sql);
$total_count = $row['cnt'];