2012-05-27 64 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"; 

店varibale這個值命名爲x。那麼

$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

字符串可以增加在Perl語句:

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

(如果你不檢查REQ9999999您將結束與RER0000000在某一點)

+0

其實這是perl的方式 - '精神' - 很好的答案! –

+0

這是實現我想要的好方法。那麼想知道這種方法會有什麼後果嗎? –

+0

我已經描述了主要的後果,你必須注意你的增量不會捲入字符串的字母部分。除此之外,可能會有輕微的性能損失,但我相信這與執行獲取當前最大請求ID的查詢的性能成本相比可以忽略不計。 – lanzz

相關問題