📑 목차
필터링 개요 필터 UI 구성 필터 유형별 설명 결과 테이블 페이지네이션 SQL 쿼리 구조

🔍 개선 항목 조회 및 필터링

대시보드 아래에 위치한 필터 패널과 결과 테이블로, 등록된 모든 개선 항목을 다양한 조건으로 검색하고 조회할 수 있습니다.

필터 UI 구성

위치: 대시보드 차트 패널과 결과 테이블 사이

필터 패널은 5개의 입력 컨트롤로 구성된 2단 구조입니다:

  1. 1단 (가로 배치, grid 5열): 시작날짜 / 종료날짜 / 프로젝트 선택 / 상태 선택 / 검색 버튼
  2. 2단 (전체 폭): 제목·설명 키워드 검색 입력창

필터 유형별 상세 설명

📅 날짜 필터

$filter_date_from = $_GET['date_from'] ?? date('Y-m-d', strtotime('-30 days'));
$filter_date_to   = $_GET['date_to']   ?? date('Y-m-d');

기본값은 최근 30일입니다. 시작일과 종료일을 각각 선택할 수 있습니다.

📁 프로젝트 필터

5개 프로젝트 중 선택: 아이엠플랫폼 SMS ainote nalara 기타

🔄 상태 필터

5가지 상태 중 선택: 개발중 완료 테스트중 배포됨 롤백

🔎 키워드 검색

WHERE (title LIKE '%{$filter_search}%'
       OR description LIKE '%{$filter_search}%')

제목과 상세 설명 모두에서 키워드를 검색합니다.

결과 테이블 (8개 컬럼)

컬럼출력 내용비고
날짜substr($row['date'], 5)MM-DD 형식
제목substr($row['title'], 0, 30)최대 30자까지
프로젝트원문 그대로
카테고리원문 그대로버그수정/기능추가/성능개선/보안/리팩토링/문서화
상태색상 뱃지개발중(파랑)/완료(초록)/테스트중(노랑)/배포됨(초록)/롤백(빨강)
영향도색상 뱃지낮음(초록)/중간(노랑)/높음(빨강)/긴급(진한빨강)
파일$row['files_changed'] . '개'수정된 파일 수
액션버튼 3종보기 / 수정 / 공지

액션 버튼

🔵 보기

admin_source_improvements_form.php?id=X&action=view → 읽기 전용 상세 페이지

🟡 수정

admin_source_improvements_form.php?id=X&action=edit → 편집 모드로 열기

🟢 공지

notice_ai-write.php?source_id=X → 공지사항으로 발행 (notice_id 없을 때만 표시)

페이지네이션

페이지당 20건씩 표시됩니다.

$per_page = 20;
$offset = ($page - 1) * $per_page;
$list_sql = "SELECT SQL_CALC_FOUND_ROWS *
FROM source_improvements {$where}
ORDER BY date DESC, id DESC
LIMIT {$offset}, {$per_page}";

페이지네이션 UI: 「처음」「이전」 [현재±2 숫자] 「다음」「마지막」
하단 요약: "총 N건 (현재페이지/전체페이지)"

전체 SQL 쿼리 구조

// WHERE 절 동적 구성
$where = "WHERE 1=1";
if ($filter_date_from) $where .= " AND date >= '{$filter_date_from}'";
if ($filter_date_to)   $where .= " AND date <= '{$filter_date_to}'";
if ($filter_project)   $where .= " AND project = '{$filter_project}'";
if ($filter_status)    $where .= " AND status = '{$filter_status}'";
if ($filter_search)    $where .= " AND (title LIKE '%{$filter_search}%'
                           OR description LIKE '%{$filter_search}%')";

// 총 건수
$count_sql = "SELECT COUNT(*) as cnt
              FROM source_improvements {$where}";

// 목록 (최신순)
$list_sql = "SELECT SQL_CALC_FOUND_ROWS *
             FROM source_improvements {$where}
             ORDER BY date DESC, id DESC
             LIMIT {$offset}, {$per_page}";