2012-05-27 5 views
3

request_id가 REQ0000001,REQ0000002....REQ0000010, REQ0000011...., REQ0000099 REQ0000100.....과 같이 첫 번째 세 문자가 REQ 다음에 7 자 (숫자가 순서) 인 요구 사항이 있습니다.이 request_id는 mysql의 기본 키입니다 표.다음 요청 ID를 생성하는 방법

테이블의 마지막 항목이 REQ0000009라고 가정하면 다음 항목은 REQ0000010이됩니다. Perl에서 수행하는 방법 ??

나는 다음과 같은 방법을 사용하고 있습니다 :

$sql_query = "select request_id from requests order by request_id DESC LIMIT 1"; 

가게 X라는 이름의 varibale에서이 값을. 다음

$x = reverse $x; #Reverse the String 
chop $x; # Chop the last Character (here R) 

chop $x; # Chop the last Character (here E) 

chop $x; # Chop the last Character (here Q) 

$x = reverse $x; # Again Reverse 
$x = $x + 1; # Add 1 

if (length($x) eq 1) # if length ==1{ 

    $NextReq_id = 'REQ000000'.$x; 

elsif (length($x) eq 2) 


    $NextReq_id = 'REQ00000'.$x; 

elsif (length($x) eq 3) 


    $NextReq_id = 'REQ0000'.$x; 

elsif (length($x) eq 4) 
{ 

$NextReq_id = 'REQ000'.$x; 
} 

여기에 더 좋은 방법이 있습니까? 왼쪽 패드

+0

당신은 'REQ9999999'를 어떻게 다루겠습니까? 'RER0000000' 또는'REQ10000000'? – TLP

답변

2
$sql_query = "SELECT CONCAT('REQ',LPAD(CAST(SUBSTR(request_id,4,7) AS UNSIGNED)+1,7,'0')) ORDER BY request_id DESC LIMIT 1" 
+0

또 다른 멋진 대답입니다. –

+0

응답 해 주셔서 감사합니다. –

1

사용 sprintf와 펄 문자열 증가 수 0

sprintf("REQ%08d", $x) 
3

와 문자열 :

if ($x lt 'REQ9999999') { 
    $nextRequestId = $x; 
    $nextRequestId++; 
} else { 
    // you ran out of request ids 
} 

을 (당신이 REQ9999999 확인하지 않는 경우가 종료됩니다 어떤 점에서 RER0000000와 더불어)

+0

실제로 이것은 perl 방식입니다 - '정신적 인'- 좋은 대답 !!!! –

+0

이것은 내가 원했던 것을 달성하기위한 좋은 방법이다. 그럼이 접근법의 결과가 있는지 알고 싶습니까? –

+0

나는 이미 주요 결과에 대해 설명 했으므로 문자열의 알파벳순으로 증가하지 않는 것을주의해야한다. 그 외에도 현재의 최대 요청 ID를 가져 오기 위해 실행하는 쿼리의 성능 비용에 비해 무시할 만하지 만 약간의 성능 저하가있을 수 있습니다. – lanzz

관련 문제