2013-07-10 4 views
0

고유 한 결제 식별자/번호를 만들고 싶습니다. 나는 그것이 일정한 문자열, 연도 및 추가 숫자의 조합이되기를 원합니다. 예 : 'ABC-2013-100001' 청구서 식별자가 고유하다는 것을 확실히 알기 위해 어떻게해야합니까? 고유하고 자동 증가 될 기본 키처럼 billing_id를 유지하려고 생각했습니다. 그런 다음 max (billing_id)를 선택하여 마지막 하나에 1을 추가하고 접두사 "ABC-2013"을 추가 한 다음 테이블에 삽입합니다. 문제는 이것이 3 단계 방법이라는 것입니다. 선택하고, 무언가를하고, 삽입하십시오. 두 명의 사용자가 동시에이 작업을 수행 할 때마다 동일한 숫자가 선택되므로 기술적으로 동일한 식별자가 삽입되는 것과 같은 일이 발생할 수 있습니다. 내가 틀렸고 지나치게 과민 반응을 일으켰습니까? 아니면 고유 한 ID를 생성하는 이런 종류의 공통점입니까? 다른 접근 방식을 취해야합니까?고유 결제 식별자 생성

편집

나는이 같은 짓도록 확인 :

$data = array(
    'billing_identifier' => 'law-'.$year."-".$this->db->insert_id() 
); 
// inserting into billing_identifiers 
    $this->db->insert('billing_identifiers', $data); 

    $bill_id = $this->db->insert_id(); 

을하지만, $ this-> DB-> INSERT_ID() 의미가 있습니다 시작과를 호출 한 후 0 insert 함수는 마지막 id를 얻는다. 한 번에 그렇게 할 수있는 방법이 없습니까?

+0

사용 [마지막으로 삽입 된 ID]를 사용할 수 있습니다 (http://stackoverflow.com/questions/3742554/getting-insert-id-with-insert-pdo-mysql). 이것은 'PDO 버전입니다. 삽입 직후에 호출하십시오. ** 절대 MAX. ** ID없이 "ABC-2013-"를 저장하십시오. –

+0

데이터베이스에서 필드를 고유하게 만들려면 편리 할 수도 있습니다. – randomizer

+0

은 순차적 인 번호의 틈이 있습니까? ('InnoDB'에서 AFAIK 가능한 문제) –

답변

0

그냥 사용하면 기본 ID가 부여됩니다.

<?php 
$con=mysqli_connect("127.0.0.1","user","pass","db"); 
//query here 
$id = mysqli_insert_id($con); 

$bill_id = 'ABC-2013-'. $id; 

?> 

은 때문에 ... "질문에 맞지 않는"의 변경

+0

'rand'는 유니크를위한 해결책이 아닙니다 –

+0

무엇? rand는 두 개의 주어진 숫자 사이에서 임의의 숫자를 얻습니다. 유니크에 대해해야 할 일이 무엇인지 모릅니다 ... – user2067005

+1

사용자가 고유 번호를 구체적으로 요구했습니다. 'rand()'가 같은 번호를 두 번 줄 수 있습니다 –

0

마지막으로 삽입 된 ID를 취득하기위한 MySQL의 기능은,이 패드 하나의 예를 들어 제로의 문자열 :

CONCAT(
    'ABC-2013-', 
    LPAD(
     LAST_INSERT_ID()+1, 
     6, 
     '0' 
    ) 
) 

LAST_INSERT_ID()+1은 현재 삽입되는 ID입니다.

LPAD(str, length, pad)은 앞에 새 ID를 0으로 채 웁니다.

은 값을 문자열로 결합합니다.

결제 식별자 열에 해당 값을 삽입하십시오.

0

당신은 또한

strtime(d/y/m) time object