DB 검색(select) 좀 봐주셨으면 좋겠습니다.
본문
그누보드5를 이용하여 게시판을 수정중에 있습니다.
현재 사용중인 테이블명이 g5_write_detection_info 이고... 해당 테이블을 이용하는 게시판(view) 부분입니다.
해당 페이지에서 검색버튼을 누르게 되면 팝업창이 열리며 아래의 코드가 들어있는 파일을 열게 되고 해당 창에서는
g5_write_g_security_total 테이블을 검색하여 기업명등을 검색하게 되고...
원하는 기업명을 클릭 했을때...
동일한 기업명이 g5_write_detection_info 내에 존재한다면 해당 레코드의
notice_number (통지번호)필드값을 추출하여 필요한 부분의 값(끝에 3자리)만을 빼내어
숫자로 바꾸고, 숫자 형식으로 바꾼 데이터 중 가장 큰 값에 1을 더하여
원래 형식대로 바꾸어 다시금 돌려주는 코드입니다. (이렇게 할려구요.. ㅎㅎㅎ)
근데.... 프로그램 오류라고 하면서 열리지가 않네요... ㅡ.ㅡ;;
원래 다른 용도로 사용이 되던 코드였는데....
두번째 select 쿼리 부분부터 HereDoc 문법 앞 부분까지 새로이 추가한 것입니다.
원래 프로그램을 이리 짜면 되는게 아닌건지.... 제가 그냥 생각대로.. 이렇게하면 되지 않을까 했는데...
아니나 다를까... 안되네요... ㅎㅎㅎㅎ
어떻게 수정해야 될런지 첨삭 좀 부탁드려 봅니다.. (_ _)
<?php
if($sch_text != "") { // 초기 로딩시 실행 안함
$sql = "select company_name, detection_mail from g5_write_g_security_total where company_name like '%".$sch_text."%'";
$result = sql_query($sql);
$search_count = 0;
$string_year_month = date("y")."-".date("m")."-";
while ($row = sql_fetch_array($result)) {
$string_company_name = htmlspecialchars($row[company_name]); # 고객사명
$string_detection_mail = htmlspecialchars($row[detection_mail]); # 탐지통보 E-mail
$sql_notice_number = "select notice_number from g5_write_g_detection_info where company_name like '".$string_company_name."'";
$result_notice_number = sql_query($sql_notice_number);
$notice_number_max = 0;
while ($row_notice_number = sql_fetch_array($result_notice_number)) {
$string_notice_number = htmlspecialchars($row_notice_number[notice_number]]);
$string_number_int = (int)substr($string_notice_number, -3);
if($notice_number_max < $string_number_int) {
$notice_number_max = $string_number_int;
}
}
$notice_number_max++;
$tmp_string = (string)$notice_number_max;
$string_tmp_number = str_pad($tmp_string, 3, "0", STR_PAD_LEFT);
echo <<< HereDoc
<tr><td style="padding:2 0 2 10;" align="center"><a href="javascript:setVar_company('{$string_company_name}','{$string_detection_mail}','{$string_year_month}','{$string_tmp_number}'">{$row[company_name]}</a></td></tr>
HereDoc;
$search_count++;
}
if (!$search_count){
echo "<tr><td colspan='2' align='center'><b>".$sch_text."</b>(으)로 검색한 고객사가 없습니다.</td></tr>";
}
}
?>
!-->
답변 4
17~36 라인 대신
$sql_notice_number = 'select MAX(CAST(RIGHT(notice_number,3) AS UNSIGNED))+1 as max from g5_write_g_detection_info where company_name = "'.$string_company_name.'"';
$row_notice_number = sql_fetch_array($sql_notice_number);
$notice_number_max = $row_notice_number['max'];
if(!$notice_number_max) $notice_number_max = 1;
$string_tmp_number = sprintf('%03d', $notice_number_max);
이렇게 하면 되지 않을까 싶긴 한데요..
뒷 세자리 잘라서 찾은 맥스값이 999라면 결과값이 1000이 될텐데 문제 없는건지 모르겠습니다.
그런데 프로그램 오류가 있다고 하셨는데.. 얼핏봐서는 오류나올만한데가 잘 안보이는군요.
위 소스를 적용해도 오류가 있을 수 있겠네요. 다른 부분에서 나온 오류일지도...
SELECT notice_number FROM g5_write_g_security_total INNER JOIN g5_write_detection_info ON g5_write_g_security_total.기업명 = g5_write_detection_info.기업명
WHERE g5_write_detection_info.notice_number LIKE '%R필요한 값'
요롷게 하면 되지 않을까요? 머리가 안좋아 이미지가 안그러지네요 ㅜㅜ
일단 주어진 조건으로 함 짜봤습니다. 참고하세요.
아.. 소스가 있었네요 ㅜㅜ
소스를 확인 못했습니다. ㅜㅜ 완전 뻘글 된듯 ㅜㅜ
남보살님.... 먼지손님 두분 모두 답변 감사드립니다.. (_ _)
두분모두 채택해 드리고 싶었지만, 한분밖에 안 되는 관계로.. ㅎㅎㅎ
먼지손님 코드로 바꾸어 실행시켜 봤는데... 오류 없이 동작을 합니다.
그런데... 숫자 값이 증가가 되지 않네요... ㅎㅎㅎ
글을 하나 쓰고.... 다음에 동일 기업에 대해 글을 써도 숫자가 동일하게 001로 나오네요.... ^^