티스토리 뷰
데이터베이스에서 원하는 정보를 빠르게 찾을 수 있도록 검색 기능을 구현하는 것은 매우 중요하다. 특히 여러 개의 컬럼에서 하나의 검색어로 데이터를 조회할 수 있도록 만들면, 사용자 경험이 훨씬 좋아진다.
이번 포스팅에서는 MySQL 테이블의 모든 컬럼을 자동으로 검색하는 PHP 코드를 구현하는 방법을 알아본다. 기존에는 특정 컬럼을 지정해 검색하는 방식이 일반적이었지만, 테이블에 새로운 컬럼이 추가되더라도 수정 없이 자동으로 반영될 수 있도록 효율적인 쿼리를 구성할 것이다.
1. MySQL에서 특정 컬럼이 아닌 전체 컬럼을 검색해야 하는 이유
일반적으로 데이터베이스에서 검색을 수행할 때는 특정 컬럼을 지정해 검색하는 경우가 많다. 예를 들어, name 또는 email 컬럼에서 특정 값을 찾는 방식이다.
SELECT * FROM users WHERE name LIKE '%검색어%' OR email LIKE '%검색어%';
그러나 이런 방식은 다음과 같은 문제를 가진다.
✅ 새로운 컬럼이 추가될 경우, SQL문을 수정해야 한다.
✅ 검색 범위가 한정적이라 사용자가 원하는 데이터를 찾지 못할 수 있다.
✅ 사용자가 어떤 정보를 검색할지 미리 예측해야 한다.
특히 관리 시스템에서는 검색 범위를 넓혀야 하는 경우가 많다. 예를 들어 **대출 관리 시스템(accountLoan 테이블)**에서 검색할 때, 은행명(bank), 대출 금액(loanAmount), 용도(content), 담당자(crew) 등 모든 컬럼에서 검색이 가능하도록 하면 훨씬 유용하다.
2. MySQL 컬럼 목록을 자동으로 가져와서 검색하는 방법
PHP에서는 MySQL의 SHOW COLUMNS FROM 테이블명 쿼리를 사용하여 특정 테이블의 컬럼 목록을 조회할 수 있다. 이 기능을 활용하면 새로운 컬럼이 추가되더라도 자동으로 검색 대상에 포함할 수 있다.
📌 테이블의 모든 컬럼에서 검색어를 조회하는 PHP 코드
아래 코드는 특정 테이블의 모든 컬럼에서 검색을 수행하는 방법을 보여준다.
require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
$pdo = db_connect();
$order = " ORDER BY loanStartDate ASC, num ASC ";
$sql_conditions = [];
$sql_params = [];
// 테이블 컬럼 목록을 자동으로 가져오기
$columns = [];
$query = $pdo->query("SHOW COLUMNS FROM accountLoan"); // 테이블명 변경 가능
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
$columns[] = $row['Field']; // 컬럼 이름 저장
}
// 검색어가 있을 경우 모든 컬럼에서 검색하도록 설정
if (!empty($search)) {
$search_conditions = [];
foreach ($columns as $column) {
$search_conditions[] = "$column LIKE :search"; // 각 컬럼에서 검색
}
$sql_conditions[] = "(" . implode(" OR ", $search_conditions) . ")";
$sql_params[':search'] = "%$search%";
}
// 날짜 필터 적용 (대출일 기준)
$sql_conditions[] = "loanStartDate BETWEEN :fromdate AND :todate";
$sql_params[':fromdate'] = $fromdate;
$sql_params[':todate'] = $todate;
// 삭제된 데이터 제외
$sql_conditions[] = "is_deleted IS NULL";
// 최종 SQL 조합
$sql = "SELECT * FROM accountLoan WHERE " . implode(" AND ", $sql_conditions) . $order;
// SQL 실행
$stmh = $pdo->prepare($sql);
$stmh->execute($sql_params);
$result = $stmh->fetchAll(PDO::FETCH_ASSOC);
3. 코드 상세 설명
🔹 1) SHOW COLUMNS FROM 테이블명을 활용하여 컬럼 목록 자동 조회
$query = $pdo->query("SHOW COLUMNS FROM accountLoan");
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
$columns[] = $row['Field'];
}
- SHOW COLUMNS FROM 테이블명을 실행하면, 테이블의 모든 컬럼 정보를 가져올 수 있다.
- while 문을 사용하여 컬럼 이름을 $columns 배열에 저장한다.
💡 이 방식의 장점?
➡ 새로운 컬럼이 추가되더라도 SQL문을 변경할 필요 없음.
➡ 자동으로 모든 컬럼을 검색 대상으로 포함함.
🔹 2) 검색어가 있을 경우 모든 컬럼에서 검색 적용
if (!empty($search)) {
$search_conditions = [];
foreach ($columns as $column) {
$search_conditions[] = "$column LIKE :search";
}
$sql_conditions[] = "(" . implode(" OR ", $search_conditions) . ")";
$sql_params[':search'] = "%$search%";
}
- $search 값이 있으면 모든 컬럼에서 LIKE '%검색어%' 조건을 추가.
- implode(" OR ", $search_conditions)을 사용하여 여러 개의 컬럼을 OR 조건으로 검색.
- :search 바인딩을 사용하여 SQL 인젝션 방지.
🔹 3) 날짜 필터 적용 (loanStartDate)
$sql_conditions[] = "loanStartDate BETWEEN :fromdate AND :todate";
$sql_params[':fromdate'] = $fromdate;
$sql_params[':todate'] = $todate;
- BETWEEN을 사용하여 loanStartDate(대출일)를 기준으로 검색 기간을 설정.
🔹 4) 삭제된 데이터 제외
$sql_conditions[] = "is_deleted IS NULL";
- is_deleted가 NULL인 데이터만 조회하여 삭제된 데이터는 검색에서 제외.
4. 실제 실행 결과 예시
🔹 검색어: "기업"을 입력했을 경우
SELECT * FROM accountLoan
WHERE (bank LIKE '%기업%' OR loanAmount LIKE '%기업%' OR content LIKE '%기업%' OR crew LIKE '%기업%' ...)
AND loanStartDate BETWEEN '2024-01-01' AND '2024-12-31'
AND is_deleted IS NULL
ORDER BY loanStartDate ASC, num ASC;
🔍 은행명, 차입금, 용도, 담당자 등 모든 컬럼에서 "기업"이라는 키워드를 포함하는 데이터를 검색
5. 최적화된 PHP 검색 기능 적용하기
이제 데이터베이스에서 검색할 때 특정 컬럼을 지정하는 것이 아니라 자동으로 모든 컬럼에서 검색할 수 있도록 최적화된 방법을 알게 되었다.
이 방식은 새로운 컬럼이 추가되더라도 자동으로 검색 대상에 포함되며, 코드 유지보수가 훨씬 간편해진다. MySQL과 PHP를 활용한 검색 기능을 구현할 때 적극적으로 활용해보자.
이제 데이터 검색 기능을 만들 때 불필요한 코드 수정 없이 더 유연하고 강력한 검색 시스템을 구축할 수 있을 것이다. 🚀
'IT tech Coding > mysql' 카테고리의 다른 글
PHP에서 Prepared Statement로 검색 결과가 나오지 않을 때 확인해야 할 점들 (0) | 2025.01.20 |
---|---|
테이블 PRIMARY KEY와 AUTO_INCREMENT: 데이터베이스 오류 해결하기 (0) | 2025.01.12 |
PHP와 MySQL로 JSON 변환 및 저장하기: 기존 테이블 데이터 재구성 (0) | 2024.12.25 |
MySQL 데이터 삽입: 효율적인 SQL 작성 기법 (0) | 2024.11.29 |
기존 테이블의 컬럼에 각각 있는 자료를 새로운 테이블에 하나씩 생성하는 방법 연구 (0) | 2024.11.23 |
- Total
- Today
- Yesterday
- 파이썬코드줄바꿈방법
- 구글드라이브API
- 프로그래머생활
- ajax오류메시지
- 효율적코딩방법
- #InstallForge
- json파일편하게보는법
- 엑셀셀보호
- #프로그램설치
- 테크에능한여성
- 코딩효율성
- 캐드자동작도
- Bootstrap 5
- 스크립트작성기초
- 오토핫키가이드
- General error: 2031
- 코딩튜토리얼
- 티스토리챌린지
- json파일형태보기
- #파이썬패키징
- isset을 적용해야 하는 이유
- chatGPT3.5파이썬버전
- coalesce는 한국어로 "코얼레스크" 또는 "코얼리스"
- 엑셀보호
- 1. #웹개발 2. #로트번호 3. #성적서보기 4. #ajax 5. #jquery 6. #php 7. #프론트엔드 8. #백엔드 9. #부트스트랩 10. #웹기능구현
- 뫄프로그래밍
- 오블완
- 엑셀입력보호
- sql문장 날짜계산
- 도면자동생성
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |