Как создать идентификатор заявки с правильной длиной, заполнив середину 0

Я пытаюсь сгенерировать значение идентификатора заявки в следующем формате: yymm###### для использования в моей таблице базы данных. Это выражает двухзначный год, двухзначный месяц и шестизначный числовой идентификатор, уникальный для префикса год-месяц.

Если для текущего месяца и года нет других идентификаторов билетов (апрель 2017 года на момент публикации), числовая часть значения должна быть по умолчанию: 000000, В этом случае правильный сгенерированный идентификатор билета должен быть: 1704000000,

Если в текущем месяце — году существует 1 или несколько ранее существующих идентификаторов билетов, то новый идентификатор заявки должен быть на 1 больше, чем самый высокий идентификатор заявки.

В настоящее время я использую php для увеличения идентификатора заявки следующим образом:

$tkid = $rowt["TICKET_ID"] + 1;

Но, используя этот код, генерирует идентификатор заявки, например так: 17041

Я уже положил ticket_id приписывает unsigned zerofill а также type int 6,

По причине дизайна я не хочу использовать автоматическое приращение.

Код:

$sqlt = "SELECT TICKET_ID FROM group where groupid = '$tid' ";
$ticket = mysqli_query($conn , $sqlt);
$rowcount = mysqli_num_rows($ticket);
if ($rowcount == 0)
echo "No records found";
else
{
$rowt = mysqli_fetch_assoc($ticket);
}
$tkid = $rowt["TICKET_ID"] + 1;

<input type="text" readonly="readonly" value="<?php echo date('ym'). $tkid ;?>" name="TICKET_ID" >

2

Решение

Если бы это был мой проект, я бы mysql сделать всю работу (и я бы использовал подготовленное заявление по соображениям безопасности).

Чтобы устранить любые конфликты KEYWORD / tablename, я рекомендую поставить галочку напротив group Таблица.

Мой запрос будет увеличивать самый высокий TICKET_ID значение для выбранного groupid (и дополните его нулями, если вы все еще используете этот код в начале следующего тысячелетия!). Если нет строк для выбранного groupidтогда новый [yymm000000] значение будет доставлено в наборе результатов.

if($stmt=$conn->prepare(
"(SELECT LPAD(`TICKET_ID`+1,10,'0') FROM `group`
WHERE `groupid`=? ORDER BY `TICKET_ID` DESC LIMIT 1)
UNION
(SELECT CONCAT(DATE_FORMAT(CURDATE(),'%y%m'),'000000'))
LIMIT 1;")
){
$stmt->bind_param("s",$tid);
$stmt->execute();
$stmt->bind_result($new_tkid);
$stmt->fetch();
echo "<input type=\"text\" name=\"TICKET_ID\" value=\"$new_tkid\" readonly=\"readonly\">";
$stmt->free_result();
}else{
echo "Query Syntax Error"; // echo mysqli_error($conn);
}

Это не только обеспечивает необходимую безопасность вашего запроса, но и объединяет все манипуляции с данными, а не смешивает манипуляции с эхом.

Используемые функции:

1

Другие решения

Попробуйте изменить это:

<?php echo date('ym'). $tkid ;?>

к этому:

<?php echo date('ym') . str_pad($tkid, 6, '0', STR_PAD_LEFT); ?>

Увидеть str_pad ().

4

Запрос на форматирование с использованием printf

<?php printf('%s%06d', date('ym'), $tkid); ?>

Серьезно, printf — рабочая лошадка

0
По вопросам рекламы [email protected]