2012-05-27 235 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

相关问题