如何生成下一个请求ID

时间:2012-05-27 11:01:48

标签: mysql perl sequence

我有一个要求,其中request_id将采用 REQ0000001,REQ0000002....REQ0000010, REQ0000011...., REQ0000099 REQ0000100.....像前三个字符是REQ后跟7个字符(数字是序列)...这个request_id是mysql表中的主键。

假设表中的最后一个条目是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;
} 

这里有更好的方法吗?

3 个答案:

答案 0 :(得分:3)

您可以在perl中增加字符串:

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

(如果您没有检查REQ9999999,那么您最终会在RER0000000处结束)

答案 1 :(得分: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"

答案 2 :(得分:1)

使用sprintf左边填充0s

的字符串
sprintf("REQ%08d", $x)