티스토리 뷰
반응형
필드가 많아지고, 검색을 다 걸어야 하는 경우....
코드가 너무 길어진다. 실제로 내가 만든 검색을 위한 코드인데.... 어마어마하게 길다.
// 검색을 위해 모든 검색변수 공백제거
$search = str_replace(' ', '', $search);
if($search=="" && $findstr==="전체")
{
$sql="select * from mirae8440.work " . $whereattached . $a;
$sqlcon = "select * from mirae8440.work " . $whereattached . $b; // 전체 레코드수를 파악하기 위함.
}
elseif($search!="" && $find!="all" && $findstr==="전체")
{
$sql="select * from mirae8440.work where ($find like '%$search%') " . $attached . $a;
$sqlcon="select * from mirae8440.work where ($find like '%$search%') " . $attached . $b;
}
elseif($findstr!=="전체")
{
// 공사유형이 전체가 아닐때
// 검색어가 2개일경우
if($findstr=='덧방')
$searchstr = '';
else
$searchstr = '신규';
if(count($Twosearchword)>1)
{
if($check!='1')
$attached = '';
$search1 = $Twosearchword[0];
$sql ="select * from mirae8440.work where ( (replace(workplacename,' ','') like '%$search1%' ) or (firstordman like '%$search1%' ) or (firstordmantel like '%$search1%' ) or (secondordman like '%$search1%' ) or (chargedman like '%$search1%' ) ";
$sql .="or (delicompany like '%$search1%' ) or (attachment like '%$search1%' ) or (hpi like '%$search1%' ) or (firstord like '%$search1%' ) or (secondord like '%$search1%' ) or (worker like '%$search1%' ) or (memo like '%$search1%' ) or (material1 like '%$search1%' ) or (material2 like '%$search1%' ) or (material3 like '%$search1%' ) or (material4 like '%$search1%' ) or (material5 like '%$search1%' ) or (material6 like '%$search1%' )) and ( checkstep='$searchstr' ) " ;
$search2 = $Twosearchword[1];
$sql .= " and ( (replace(workplacename,' ','') like '%$search2%' ) or (firstordman like '%$search2%' ) or (secondordman like '%$search2%' ) or (secondordmantel like '%$search2%' ) or (chargedman like '%$search2%' ) or (chargedtel like '%$search2%' )";
$sql .= "or (delicompany like '%$search2%' ) or (attachment like '%$search2%' ) or (hpi like '%$search2%' ) or (firstord like '%$search2%' ) or (secondord like '%$search2%' ) or (worker like '%$search2%' ) or (memo like '%$search2%' ) or (material1 like '%$search2%' ) or (material2 like '%$search2%' ) or (material3 like '%$search2%' ) or (material4 like '%$search2%' ) or (material5 like '%$search2%' ) or (material6 like '%$search2%' )) and ( checkstep='$searchstr' ) " . $attached . $a;
$sqlcon ="select * from mirae8440.work where ( (replace(workplacename,' ','') like '%$search1%' ) or (firstordman like '%$search1%' ) or (firstordmantel like '%$search1%' ) or (secondordman like '%$search1%' ) or (secondordmantel like '%$search1%' ) or (chargedman like '%$search1%' ) ";
$sqlcon .="or (delicompany like '%$search1%' ) or (attachment like '%$search1%' ) or (hpi like '%$search1%' ) or (firstord like '%$search1%' ) or (secondord like '%$search1%' ) or (worker like '%$search1%' ) or (memo like '%$search1%' ) or (material1 like '%$search1%' ) or (material2 like '%$search1%' ) or (material3 like '%$search1%' ) or (material4 like '%$search1%' ) or (material5 like '%$search1%' ) or (material6 like '%$search1%' )) and ( checkstep='$searchstr' ) " ;
$sqlcon .= " and ( (replace(workplacename,' ','') like '%$search2%' ) or (firstordman like '%$search2%' ) or (secondordman like '%$search2%' ) or (secondordmantel like '%$search2%' ) or (chargedman like '%$search2%' ) or (chargedtel like '%$search2%' )";
$sqlcon .= "or (delicompany like '%$search2%' ) or (attachment like '%$search2%' ) or (hpi like '%$search2%' ) or (firstord like '%$search2%' ) or (secondord like '%$search2%' ) or (worker like '%$search2%' ) or (memo like '%$search2%' ) or (material1 like '%$search2%' ) or (material2 like '%$search2%' ) or (material3 like '%$search2%' ) or (material4 like '%$search2%' ) or (material5 like '%$search2%' ) or (material6 like '%$search2%' )) and ( checkstep='$searchstr' ) " . $attached . $b;
} // end of Twosearchword searching
else { // end of one word
if($check!='1') {
$sql ="select * from mirae8440.work where ((replace(workplacename,' ','') like '%$search%' ) or (firstordman like '%$search%' ) or (firstordmantel like '%$search%' ) or (secondordman like '%$search%' ) or (secondordmantel like '%$search%' ) or (chargedman like '%$search%' ) ";
$sql .="or (delicompany like '%$search%' ) or (attachment like '%$search%' ) or (hpi like '%$search%' ) or (firstord like '%$search%' ) or (secondord like '%$search%' ) or (worker like '%$search%' ) or (memo like '%$search%' ) or (material1 like '%$search%' ) or (material2 like '%$search%' ) or (material3 like '%$search%' ) or (material4 like '%$search%' ) or (material5 like '%$search%' ) or (material6 like '%$search%' )) and ( checkstep='$searchstr' ) " . $a;
$sqlcon ="select * from mirae8440.work where ((replace(workplacename,' ','') like '%$search%' ) or (firstordman like '%$search%' ) or (secondordman like '%$search%' ) or (secondordmantel like '%$search%' ) or (chargedman like '%$search%' ) ";
$sqlcon .="or (delicompany like '%$search%' ) or (attachment like '%$search%' ) or (hpi like '%$search%' ) or (firstord like '%$search%' ) or (secondord like '%$search%' ) or (worker like '%$search%' ) or (memo like '%$search%' ) or (material1 like '%$search%' ) or (material2 like '%$search%' ) or (material3 like '%$search%' ) or (material4 like '%$search%' ) or (material5 like '%$search%' ) or (material6 like '%$search%' )) and ( checkstep='$searchstr' ) " . $b;
}
if($check=='1' || $output_check=='1' || $measure_check=='1' || $plan_output_check=='1' || $team_check=='1') {
$sql ="select * from mirae8440.work where ((replace(workplacename,' ','') like '%$search%' ) or (firstordman like '%$search%' ) or (secondordman like '%$search%' ) or (secondordmantel like '%$search%' ) or (chargedman like '%$search%' ) ";
$sql .="or (delicompany like '%$search%' ) or (hpi like '%$search%' ) or (firstordman like '%$search%' ) or (firstordmantel like '%$search%' ) or (firstord like '%$search%' ) or (secondord like '%$search%' ) or (worker like '%$search%' ) or (memo like '%$search%' ) or (material1 like '%$search%' ) or (material2 like '%$search%' ) or (material3 like '%$search%' ) or (material4 like '%$search%' ) or (material5 like '%$search%' ) or (material6 like '%$search%' ) ) and ( checkstep='$searchstr' ) " . $attached . $a;
$sqlcon ="select * from mirae8440.work where ((replace(workplacename,' ','') like '%$search%' ) or (firstordman like '%$search%' ) or (firstordmantel like '%$search%' ) or (secondordmantel like '%$search%' ) or (firstordman like '%$search%' ) or (secondordman like '%$search%' ) or (chargedman like '%$search%' ) ";
$sqlcon .="or (delicompany like '%$search%' ) or (hpi like '%$search%' ) or (firstord like '%$search%' ) or (secondord like '%$search%' ) or (worker like '%$search%' ) or (memo like '%$search%' ) or (material1 like '%$search%' ) or (material2 like '%$search%' ) or (material3 like '%$search%' ) or (material4 like '%$search%' ) or (material5 like '%$search%' ) or (material6 like '%$search%' ) ) and ( checkstep='$searchstr' ) " . $attached . $b;
}
} // end of Twosearchword searching
}
elseif($search!="" && $find=="all") { // 필드별 검색하기
// 검색어가 2개일경우
if(count($Twosearchword)>1)
{
if($check!='1')
$attached = '';
$search1 = $Twosearchword[0];
$sql ="select * from mirae8440.work where ( (replace(workplacename,' ','') like '%$search1%' ) or (firstordman like '%$search1%' ) or (firstordmantel like '%$search1%' ) or (secondordman like '%$search1%' ) or (secondordmantel like '%$search1%' ) or (chargedman like '%$search1%' ) ";
$sql .="or (delicompany like '%$search1%' ) or (attachment like '%$search1%' ) or (hpi like '%$search1%' ) or (firstord like '%$search1%' ) or (secondord like '%$search1%' ) or (worker like '%$search1%' ) or (memo like '%$search1%' ) or (material1 like '%$search1%' ) or (material2 like '%$search1%' ) or (material3 like '%$search1%' ) or (material4 like '%$search1%' ) or (material5 like '%$search1%' ) or (material6 like '%$search1%' )) " ;
$search2 = $Twosearchword[1];
$sql .= " and ( (replace(workplacename,' ','') like '%$search2%' ) or (firstordman like '%$search2%' ) or (firstordmantel like '%$search2%' ) or (secondordman like '%$search2%' ) or (secondordmantel like '%$search2%' ) or (chargedman like '%$search2%' ) or (chargedtel like '%$search2%' )";
$sql .= "or (delicompany like '%$search2%' ) or (attachment like '%$search2%' ) or (hpi like '%$search2%' ) or (firstord like '%$search2%' ) or (secondord like '%$search2%' ) or (worker like '%$search2%' ) or (memo like '%$search2%' ) or (material1 like '%$search2%' ) or (material2 like '%$search2%' ) or (material3 like '%$search2%' ) or (material4 like '%$search2%' ) or (material5 like '%$search2%' ) or (material6 like '%$search2%' )) " . $attached . $a;
$sqlcon ="select * from mirae8440.work where ( (replace(workplacename,' ','') like '%$search1%' ) or (firstordman like '%$search1%' ) or (firstordmantel like '%$search1%' ) or (secondordman like '%$search1%' ) or (chargedman like '%$search1%' ) ";
$sqlcon .="or (delicompany like '%$search1%' ) or (attachment like '%$search1%' ) or (hpi like '%$search1%' ) or (firstord like '%$search1%' ) or (secondord like '%$search1%' ) or (worker like '%$search1%' ) or (memo like '%$search1%' ) or (material1 like '%$search1%' ) or (material2 like '%$search1%' ) or (material3 like '%$search1%' ) or (material4 like '%$search1%' ) or (material5 like '%$search1%' ) or (material6 like '%$search1%' )) " ;
$sqlcon .= " and ( (replace(workplacename,' ','') like '%$search2%' ) or (firstordman like '%$search2%' ) or (secondordman like '%$search2%' ) or (secondordmantel like '%$search2%' ) or (chargedman like '%$search2%' ) or (chargedtel like '%$search2%' )";
$sqlcon .= "or (delicompany like '%$search2%' ) or (attachment like '%$search2%' ) or (hpi like '%$search2%' ) or (firstord like '%$search2%' ) or (secondord like '%$search2%' ) or (worker like '%$search2%' ) or (memo like '%$search2%' ) or (material1 like '%$search2%' ) or (material2 like '%$search2%' ) or (material3 like '%$search2%' ) or (material4 like '%$search2%' ) or (material5 like '%$search2%' ) or (material6 like '%$search2%' )) " . $attached . $b;
} // end of Twosearchword searching
else { // end of one word
if($check!='1') {
$sql ="select * from mirae8440.work where (replace(workplacename,' ','') like '%$search%' ) or (firstordmantel like '%$search%' ) or (firstordman like '%$search%' ) or (secondordman like '%$search%' ) or (secondordmantel like '%$search%' ) or (chargedman like '%$search%' ) ";
$sql .="or (delicompany like '%$search%' ) or (attachment like '%$search%' ) or (hpi like '%$search%' ) or (firstord like '%$search%' ) or (secondord like '%$search%' ) or (worker like '%$search%' ) or (memo like '%$search%' ) or (material1 like '%$search%' ) or (material2 like '%$search%' ) or (material3 like '%$search%' ) or (material4 like '%$search%' ) or (material5 like '%$search%' ) or (material6 like '%$search%' ) " . $a;
$sqlcon ="select * from mirae8440.work where (replace(workplacename,' ','') like '%$search%' ) or (firstordman like '%$search%' ) or (secondordman like '%$search%' ) or (secondordmantel like '%$search%' ) or (chargedman like '%$search%' ) ";
$sqlcon .="or (delicompany like '%$search%' ) or (attachment like '%$search%' ) or (hpi like '%$search%' ) or (firstord like '%$search%' ) or (secondord like '%$search%' ) or (worker like '%$search%' ) or (memo like '%$search%' ) or (material1 like '%$search%' ) or (material2 like '%$search%' ) or (material3 like '%$search%' ) or (material4 like '%$search%' ) or (material5 like '%$search%' ) or (material6 like '%$search%' ) " . $b;
}
if($check=='1' || $output_check=='1' || $measure_check=='1' || $plan_output_check=='1' || $team_check=='1') {
$sql ="select * from mirae8440.work where ((replace(workplacename,' ','') like '%$search%' ) or (firstordmantel like '%$search%' ) or (firstordman like '%$search%' ) or (secondordman like '%$search%' ) or (secondordmantel like '%$search%' ) or (chargedman like '%$search%' ) ";
$sql .="or (delicompany like '%$search%' ) or (hpi like '%$search%' ) or (firstord like '%$search%' ) or (secondord like '%$search%' ) or (worker like '%$search%' ) or (memo like '%$search%' ) or (material1 like '%$search%' ) or (material2 like '%$search%' ) or (material3 like '%$search%' ) or (material4 like '%$search%' ) or (material5 like '%$search%' ) or (material6 like '%$search%' ) ) " . $attached . $a;
$sqlcon ="select * from mirae8440.work where ((replace(workplacename,' ','') like '%$search%' ) or (firstordmantel like '%$search%' ) or (firstordman like '%$search%' ) or (secondordmantel like '%$search%' ) or (secondordman like '%$search%' ) or (chargedman like '%$search%' ) ";
$sqlcon .="or (delicompany like '%$search%' ) or (hpi like '%$search%' ) or (firstord like '%$search%' ) or (secondord like '%$search%' ) or (worker like '%$search%' ) or (memo like '%$search%' ) or (material1 like '%$search%' ) or (material2 like '%$search%' ) or (material3 like '%$search%' ) or (material4 like '%$search%' ) or (material5 like '%$search%' ) or (material6 like '%$search%' ) ) " . $attached . $b;
}
} // end of Twosearchword searching
}
머리가 아주 빠질 지경이다.....
조건에 따른 문장을 계속 만들다 보니.. 어느덧...
이제 코드를 좀 단순화 하는 과정의 노력을 해야겠다.
위의 코드를 일부 단순화했더니... 코드가 많이 줄었다.
여러 조건문을 사용하여 SQL 쿼리를 구성하는 방식을 변경하여 코드를 리팩터링할 것입니다.
각 조건에 따라 SQL의 다른 부분을 작성하는 대신, 모든 조건에 공통적인 부분을 하나의 함수에서 처리하도록 할 것입니다.동적으로 WHERE 절을 구성하는 데 필요한 조건들을 배열로 수집하고, 이를 사용하여 SQL을 구성할 것입니다.
function buildSQL($base, $conditions, $suffix = '') {
$whereClause = implode(' AND ', $conditions);
if ($whereClause) {
$whereClause = ' WHERE ' . $whereClause;
}
return $base . $whereClause . $suffix;
}
$searchConditions = [];
if ($search != "") {
$fields = [
'workplacename', 'firstordman', 'firstordmantel', 'secondordman', 'secondordmantel',
'chargedman', 'delicompany', 'attachment', 'hpi', 'firstord', 'secondord',
'worker', 'memo', 'material1', 'material2', 'material3', 'material4', 'material5', 'material6'
];
foreach ($fields as $field) {
$searchConditions[] = "(replace($field, ' ', '') LIKE '%$search%')";
}
}
if ($findstr !== "전체") {
$searchstr = ($findstr == '덧방') ? '' : '신규';
$searchConditions[] = "(checkstep = '$searchstr')";
}
if($check=='1' || $output_check=='1' || $measure_check=='1' || $plan_output_check=='1' || $team_check=='1') {
$sql ="select * from mirae8440.work where ((replace(workplacename,' ','') like '%$search%' ) or (firstordmantel like '%$search%' ) or (firstordman like '%$search%' ) or (secondordman like '%$search%' ) or (secondordmantel like '%$search%' ) or (chargedman like '%$search%' ) or (chargedmantel like '%$search%' ) ";
$sql .="or (delicompany like '%$search%' ) or (hpi like '%$search%' ) or (firstord like '%$search%' ) or (secondord like '%$search%' ) or (worker like '%$search%' ) or (memo like '%$search%' ) or (material1 like '%$search%' ) or (material2 like '%$search%' ) or (material3 like '%$search%' ) or (material4 like '%$search%' ) or (material5 like '%$search%' ) or (material6 like '%$search%' ) ) " . $attached . $a;
$sqlcon ="select * from mirae8440.work where ((replace(workplacename,' ','') like '%$search%' ) or (firstordmantel like '%$search%' ) or (firstordman like '%$search%' ) or (secondordmantel like '%$search%' ) or (secondordman like '%$search%' ) or (chargedman like '%$search%' ) or (chargedmantel like '%$search%' ) ";
$sqlcon .="or (delicompany like '%$search%' ) or (hpi like '%$search%' ) or (firstord like '%$search%' ) or (secondord like '%$search%' ) or (worker like '%$search%' ) or (memo like '%$search%' ) or (material1 like '%$search%' ) or (material2 like '%$search%' ) or (material3 like '%$search%' ) or (material4 like '%$search%' ) or (material5 like '%$search%' ) or (material6 like '%$search%' ) ) " . $attached . $b;
}
$sqlBase = "SELECT * FROM mirae8440.work";
$sql = buildSQL($sqlBase, $searchConditions, $a);
$sqlcon = buildSQL($sqlBase, $searchConditions, $b);
뭔가 더 체계적이고 멋진 코드가 되어간다.
이 코드는 기존의 코드를 크게 단순화하면서도 동일한 기능을 유지합니다.
주요 아이디어는 SQL 쿼리의 다양한 조건을 배열로 관리하고,
이 배열을 기반으로 최종 쿼리를 동적으로 구성하는 것입니다.
멋진 코드를 위해 노력하자.
반응형
'IT tech Coding > php' 카테고리의 다른 글
월별 철판단가표 만들어보기 기존 자료를 활용한 작업 (0) | 2023.09.24 |
---|---|
`echo(json_encode($data, JSON_UNESCAPED_UNICODE));`와 `echo json_encode($data);`의 차이점 (0) | 2023.08.27 |
특정문자열이 속한 span id에 색상 넣기 (0) | 2023.07.18 |
카페24, 가비아도 되는 .htaccess를 이용한 php.ini 수정방법 (2) | 2023.07.10 |
가비아 세션시간 너무 짧아서 늘리려면? 고객센터 답변 내용 참조 (0) | 2023.07.06 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- coalesce는 한국어로 "코얼레스크" 또는 "코얼리스"
- Bootstrap 5
- 도면자동생성
- 코딩튜토리얼
- 티스토리챌린지
- 파이썬코드줄바꿈방법
- 효율적코딩방법
- 엑셀입력보호
- 뫄프로그래밍
- 코딩효율성
- 엑셀셀보호
- 오블완
- chatGPT3.5파이썬버전
- sql문장 날짜계산
- 스크립트작성기초
- 프로그래머생활
- 엑셀보호
- #InstallForge
- ajax오류메시지
- 구글드라이브API
- #파이썬패키징
- General error: 2031
- 캐드자동작도
- isset을 적용해야 하는 이유
- json파일편하게보는법
- 1. #웹개발 2. #로트번호 3. #성적서보기 4. #ajax 5. #jquery 6. #php 7. #프론트엔드 8. #백엔드 9. #부트스트랩 10. #웹기능구현
- 테크에능한여성
- 오토핫키가이드
- json파일형태보기
- #프로그램설치
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함