티스토리 뷰
PHP와 MySQL을 활용해 데이터를 검색할 때, 효율적으로 작성된 SQL 쿼리는 성능을 크게 좌우합니다. 특히 다양한 조건에서 데이터를 검색하고, 중복된 데이터를 제거하는 작업이 필요할 경우, 잘 설계된 쿼리와 준비된(Prepared) 문장은 중요한 역할을 합니다. 이번 포스팅에서는 PHP와 PDO를 사용해 특정 steel_item과 spec을 검색하는 예제를 알아봅니다. 이 코드는 세 개의 데이터 테이블을 참조하
며, 검색 조건에 따라 동적으로 동작하도록 설계되었습니다.
코드 설명
아래의 코드는 두 가지 주요 조건에서 동작합니다.
- 사용자가 특정 steel_item과 search 값을 입력한 경우.
- search 값 없이 steel_item만 입력한 경우.
이 두 가지 경우에 따라 쿼리를 분리해 처리하고 있습니다.
1. search 값이 입력된 경우
사용자가 특정 검색어를 입력하면, 검색어를 포함하는 데이터를 가져오도록 설계되었습니다. 세 개의 테이블(eworks, steelmake, steel)에서 데이터를 검색하고, 각 테이블의 steel_item과 spec 필드를 통합합니다.
if (!empty($search)) {
$stmt_unique = $pdo->prepare("
SELECT DISTINCT TRIM(steel_item) AS steel_item, TRIM(spec) AS spec
FROM eworks
WHERE is_deleted IS NULL
AND TRIM(steel_item) = :steel_item
AND spec LIKE :search
UNION
SELECT DISTINCT TRIM(proditem) AS steel_item, TRIM(prodspec) AS spec
FROM steelmake
WHERE is_deleted IS NULL
AND TRIM(proditem) = :steel_item2
AND prodspec LIKE :search2
UNION
SELECT DISTINCT TRIM(steel_item) AS steel_item, TRIM(spec) AS spec
FROM steel
WHERE is_deleted IS NULL
AND TRIM(steel_item) = :steel_item3
AND spec LIKE :search3
");
$stmt_unique->execute([
':steel_item' => trim($steel_item),
':search' => "%$search%",
':steel_item2' => trim($steel_item),
':search2' => "%$search%",
':steel_item3' => trim($steel_item),
':search3' => "%$search%"
]);
}
주요 포인트:
- TRIM() 함수: 데이터를 검색할 때 불필요한 공백을 제거하여 정확한 검색을 보장합니다.
- LIKE 연산자: %$search%로 감싸 검색어를 포함하는 데이터를 찾습니다.
- UNION: 세 테이블에서 반환된 결과를 통합하고 중복된 항목을 제거합니다.
2. search 값이 입력되지 않은 경우
search 값 없이 특정 steel_item만으로 데이터를 검색해야 할 경우에는 아래 코드가 실행됩니다. 이는 모든 spec 데이터를 반환하며, search 조건을 제거한 간단한 구조로 작성되었습니다.
else {
$stmt_unique = $pdo->prepare("
SELECT DISTINCT TRIM(steel_item) AS steel_item, TRIM(spec) AS spec
FROM eworks
WHERE is_deleted IS NULL
AND TRIM(steel_item) = :steel_item
UNION
SELECT DISTINCT TRIM(proditem) AS steel_item, TRIM(prodspec) AS spec
FROM steelmake
WHERE is_deleted IS NULL
AND TRIM(proditem) = :steel_item2
UNION
SELECT DISTINCT TRIM(steel_item) AS steel_item, TRIM(spec) AS spec
FROM steel
WHERE is_deleted IS NULL
AND TRIM(steel_item) = :steel_item3
");
$stmt_unique->execute([
':steel_item' => trim($steel_item),
':steel_item2' => trim($steel_item),
':steel_item3' => trim($steel_item)
]);
}
주요 포인트:
- 동일한 steel_item 조건: 세 테이블에서 동일한 steel_item에 해당하는 데이터를 모두 가져옵니다.
- 단순화된 조건: 검색어를 추가하지 않아 조건문이 단순합니다.
코드 실행 흐름
- search 값이 있는지 확인:
- !empty($search) 조건을 사용하여 검색어가 비어 있는지 체크합니다.
- SQL 쿼리 작성:
- 조건에 따라 WHERE 문에 LIKE 절을 추가하거나 생략합니다.
- Prepared Statement 실행:
- execute() 메서드에 파라미터를 배열로 전달하여 안전한 쿼리 실행을 보장합니다.
활용 시나리오
이 코드는 다음과 같은 경우에 적합합니다:
- 재고 관리 시스템: 철강 제품의 종류와 사양을 빠르게 검색해야 할 때.
- 상품 검색 기능: 사용자 입력에 따라 특정 제품을 필터링해야 할 때.
- 중복 데이터 제거: 여러 테이블에서 데이터를 조회하며 중복 항목을 통합해야 할 때.
성능 최적화 팁
- 인덱스 활용: steel_item과 spec 컬럼에 인덱스를 설정하면 검색 속도가 향상됩니다.
- 필요 없는 데이터 필터링: is_deleted IS NULL 조건을 통해 삭제된 데이터를 배제합니다.
- Prepared Statement: SQL 인젝션 공격을 방지하고 쿼리 실행 속도를 높이는 데 도움을 줍니다.
결론
PHP와 PDO를 활용한 검색 쿼리 작성법은 효율적인 데이터 관리를 가능하게 합니다. 이 코드 구조는 다양한 시나리오에서 활용할 수 있으며, 중복 제거와 조건별 검색이 필요한 상황에 특히 유용합니다. 적절한 데이터 정리와 조건 설정을 통해 시스템의 성능과 안정성을 함께 향상시킬 수 있습니다.
'IT tech Coding > php' 카테고리의 다른 글
PHP 리팩토링으로 웹 애플리케이션 효율 높이기 (0) | 2025.01.17 |
---|---|
PHP에서 문자열 포함 여부를 확인하는 방법: strpos() 함수 완벽 가이드 (0) | 2025.01.16 |
날짜 계산 쉽게 하기 - PHP로 전전달의 29일 구하기 (0) | 2025.01.14 |
PHP로 Radio 버튼과 검색 필드를 연동하여 동적 검색 구현하기 (0) | 2025.01.02 |
PHP에서 한 자리 숫자를 두 자리로 변환하기: 실용적인 가이드 (0) | 2025.01.02 |
- Total
- Today
- Yesterday
- Bootstrap 5
- 파이썬코드줄바꿈방법
- 코딩튜토리얼
- General error: 2031
- 도면자동생성
- isset을 적용해야 하는 이유
- sql문장 날짜계산
- 엑셀셀보호
- 오토핫키가이드
- 프로그래머생활
- 효율적코딩방법
- chatGPT3.5파이썬버전
- #파이썬패키징
- 오블완
- 테크에능한여성
- #프로그램설치
- json파일형태보기
- ajax오류메시지
- 스크립트작성기초
- 1. #웹개발 2. #로트번호 3. #성적서보기 4. #ajax 5. #jquery 6. #php 7. #프론트엔드 8. #백엔드 9. #부트스트랩 10. #웹기능구현
- 캐드자동작도
- 티스토리챌린지
- 뫄프로그래밍
- 구글드라이브API
- 엑셀입력보호
- json파일편하게보는법
- coalesce는 한국어로 "코얼레스크" 또는 "코얼리스"
- 코딩효율성
- #InstallForge
- 엑셀보호
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |