Estoy tratando de generar un valor de identificación de ticket con este formato: yymm###### para usar en la tabla de mi base de datos. Esto expresa un año de 2 dígitos, un mes de 2 dígitos y una identificación numérica de 6 dígitos que es única para el prefijo año-mes.
Si no hay otras identificaciones de boletos para el mes y el año actual (abril de 2017 al momento de la publicación), la parte numérica del valor debe ser 000000 por defecto. El ID de ticket generado correcto, en este caso, debe ser: 1704000000 .
Si hay 1 o más identificadores de boletos preexistentes en el mes - año actual, entonces el nuevo identificador de boleto debe ser 1 más que el identificador de boleto más alto.
Actualmente estoy usando php para incrementar la identificación del boleto de esta manera:
$tkid = $rowt["TICKET_ID"] + 1; Pero usando este código, genera una identificación de ticket como esta: 17041
Ya puse mis atributos ticket_id en unsigned zerofill y escribo type int 6 .
Debido a una razón de diseño, no quiero usar el incremento automático .
Código:
$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" >Si este fuera mi proyecto, dejaría que mysql hiciera todo el trabajo (y usaría una declaración preparada por razones de seguridad).
Para eliminar cualquier conflicto entre PALABRA CLAVE / nombre de tabla, recomiendo marcar la tabla de group .
Mi consulta incrementará el valor más alto de TICKET_ID para el groupid seleccionado (¡y lo rellenará con ceros a la izquierda si todavía está usando este código al comienzo del próximo milenio!). Si no hay filas para el groupid seleccionado, se entregará un nuevo valor [yymm000000] en el conjunto de resultados.
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); }Esto no solo brinda seguridad esencial a su consulta, sino que coloca toda la manipulación de datos en un solo lugar en lugar de mezclar la manipulación con el eco.
Funciones utilizadas:
Solicitud de formato usando printf
<?php printf('%s%06d', date('ym'), $tkid); ?>En serio, printf es un caballo de batalla