2010-07-12 3 views
1

DB에 주문 테이블이있는 MySQL 테이블이 있습니다.이 테이블에는 자동 증분 ID가 있습니다. 지금까지 우리는 1,2,3,4,5와 마찬가지로 일반 숫자 Order-ID를 가지고 있습니다 ... 지금부터 앞으로 A20103, A20104, A20105 등과 같은 ID에 시리즈 A20을 추가해야합니다. 마지막으로 3 자리 숫자가 999에 도달하면 추가 된 시리즈가 A21001, A21002, A21003 등으로 변경되어야하며 동일한 시리즈는 이전에 추가 된 주문에 추가되어야합니다.테이블의 ID를 증가시키는 일련의 문자열을 추가하는 방법은 무엇입니까?

이 작업을 어떻게 수행 할 수 있습니까? 내가 다른 곳에서 언급 한 바와 같이이 표시 목적입니다 있으리라 믿고있어의 DB에 ID 필드가 -

"AR2" . str_pad((int) $ordernumber, 4, "0", STR_PAD_LEFT); 

가 가 가 [편집]

:의 라인을 따라

+0

은 기본 키 주문 id 컬럼에서 별도의 열인가? 영숫자로 된'AUTO_INCREMENT' 컬럼을 가질 수 없습니다. 또한 예제가 명확하지 않습니다. 주문 ID에 'A2'를 접두사로 붙이시겠습니까? 그러면 주문 ID 1은 'A20001', 주문 ID 999는 'A20999', 주문 ID 1000은 'A21000'이됩니까? – Mike

+0

예 기본 키가 동일한 orderid이며 id = 1, id = 2의 경우 A20001, A20999 일 때 id = 999에 도달하면 다음 ID는 A21001 –

+1

이되어야합니다. A20999에서 A21001로 점프해야하는 이유는 무엇입니까? A21000을 놓친 이유가 있습니까? – Mike

답변

1

뭔가를 안내하시기 바랍니다 정수!!

+0

예 적절한 영숫자 orderid –

+0

MO를 얻는 것은 사실입니다.이 경우에는 SQL에서 '패딩'을 수행하기를 원할 것입니다.concat ('A', LPAD (orderid, 5, '0')) –

1

숫자 필드가 아닌 자동 증가를 사용할 수 없습니다. 현재 자동 증가 열을 유지하고 규칙에 따라 수동으로 계산할 새 열을 추가하는 것이 좋습니다.

아마도 MAX() 함수를 사용하여 최신 주문을 받고 다음 값을 생성 할 수 있습니다. 트랜잭션 내에서 그것을 수행해야합니다.

함수 또는 트리거를 만들어 삽입을 깨끗하게 처리 할 수 ​​있습니다.

+0

+1 내 클라이언트가 주문 ID를 어디에서나 사용하고 적절한 값을 가지므로이 형식으로 주문 ID를 변경하도록 요청했습니다. 영숫자 형식으로이 방법으로 필요합니다 ... –

0

데이터베이스에 직접 접두어를 추가 할 수 없습니다. 그러나 그것을 선택할 때 앞에 붙일 수 있습니다.

SELECT concat('A', id) as id FROM table 

20000부터 시작하는 효과를 얻으려면 자동 증가 시작 값을 설정할 수 있습니다.

3

기존 auto_increment 열을 변경하면 좋은 생각이 들리지 않습니다. 정말로해야합니까? 대신, 그냥 적절한 형식의 ID를 반환하도록 선택 쿼리를 수정하지 왜? 이렇게하면 참조 무결성이 유지되고 나중에 데이터베이스를 업데이트 할 필요없이 언제든지 주문 ID 형식을 자유롭게 변경할 수 있습니다.

SELECT id, CONCAT('A2', LPAD(id, 4, '0')) AS order_id FROM <table>; 

예 출력 :

+------+----------+ 
| id | order_id | 
+------+----------+ 
| 1 | A20001 | 
| 2 | A20002 
... 
| 999 | A20999 | 
| 1000 | A21000 | 
| 1001 | A21001 | 
+------+----------+ 
관련 문제