Как сгенерировать следующий идентификатор запроса


У меня есть требование, где 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. затем

$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 3

3 ответа:

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

Вы можете увеличивать строки в perl:

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

(Если вы не проверяете для REQ9999999, то вы закончите с RER0000000 в какой-то момент)

Используйте sprintf для левой прокладки строки с 0s

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