728x90

프로그램 작업을 하다 보면 견적서 같은 작업에서 견적서 번호를 유니크하게 생성해야 하는 경우가 종종 있다. 고객사에서는 번호를 한달에 몇건을 체크하고 싶어서 순차적으로 증가되게 해달라고 요청하시는 경우가 종종 있다. 그래서 주로 날짜와 뒷번호는 순번으로 채워지곤 하는데 아래 예시는 일자별 견적서 번호를 유니크하게 생성하는 로직이다. 

 

이때는 테이블 하나에서 해결하려고 하면 많이 복잡해 지니 차라리 번호만 관리하는 테이블을 하나 더 만드는것이 좋다. 또한 다른사람이 동일하게 접속해서 들어가더라도 순서대로 번호가 증가해서 그 키값을 가지고 있는거라 예약번호나 견적서 번호 같은걸 생성 해야 할때 참고 하면 좋겠다.  

CREATE TABLE temp_estimate_numbers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    est_number VARCHAR(20) NOT NULL UNIQUE
);

 

테이블 쿼리문과 번호 생성하는 코드를 php 로 아래와 같이 메모해 본다. 

$pdo = dbconn(); // 데이터베이스 연결

// 견적서 번호 생성
$date = date('ymd');
$max_number = QRY_MAX("temp_estimate_numbers", " AND est_number LIKE '$date%'", "est_number");

if ($max_number) {
    $sequence = intval(substr($max_number, -3)) + 1; // 마지막 3자리에서 순번 증가
} else {
    $sequence = 1; // 기존 주문이 없으면 1로 시작
}

$orderNumber = str_pad($sequence, 3, '0', STR_PAD_LEFT);
$estimateNumber = $date . '-' . $orderNumber;

// 임시 테이블에 저장
$insert_sql = "INSERT INTO temp_estimate_numbers (est_number) VALUES ('$estimateNumber')";
$stmt = $pdo->prepare($insert_sql);

// 실행
if ($stmt->execute()) {
    echo "견적서 번호가 성공적으로 저장되었습니다: " . $estimateNumber;
} else {
    echo "저장 중 오류 발생.";
}
728x90

+ Recent posts