A ver...
Prueba con esto
Tabla
Código SQL:
Ver originalCREATE TABLE IF NOT EXISTS `Personas` (
`idp` INT(11) NOT NULL AUTO_INCREMENT,
`CodigoUnico` text NOT NULL,
`Anio` datetime DEFAULT NULL,
`Nombre` VARCHAR(100) NOT NULL DEFAULT '',
`Apellido` VARCHAR(100) NOT NULL DEFAULT '',
PRIMARY KEY (`idp`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
Script
Código PHP:
<?php
// Datos de conexion
$conexion = mysqli_connect("localhost","usu_bd","pwd","nombre_bd");
// Verificar la conexión
if (mysqli_connect_errno()) {printf("Falló la conexión: %s\n", mysqli_connect_error()); exit;}
$flag=0;
// Genera las variables $_GET como $get_variable
extract($_GET, EXTR_PREFIX_ALL,"get");
if (isset($get_action) AND $get_action=='add'){$action=mysqli_real_escape_string($conexion, $get_action);}else{$flag=1; echo 'Fallo action.';}
// ¿? idp no lo utilizas para nada
//$idp = $_GET['idp'];
// Genera las variables $_POST como $post_variable
extract($_POST, EXTR_PREFIX_ALL,"post");
if (isset($post_Nombre)){$Nombre=mysqli_real_escape_string($conexion, $post_Nombre);}else{$flag=1; echo 'Fallo Nombre.';}
if (isset($post_Apellido)){$Apellido=mysqli_real_escape_string($conexion, $post_Apellido);}else{$flag=1; echo 'Fallo Apellido.';}
// ¿? Esto tampoco parece que valga para nada
//$CodigoUnico = $_POST['CodigoUnico'];
// Formato de la fecha
$fecha="2018-01-13 00:00:00"; // Fecha de prueba, desconozco si la vas a generar con GET POST o con date('Y-m-d H:i:s');
// Extraemos el año
$ano=explode("-", $fecha);$ano=$ano[0];
//comprobamos que todo vaya bien
if ($flag===0) {echo '<p style="color:green">Recibo $variables ok</p>';}else{echo '<p style="color:red">Error. Revise los campos.</p>';exit;}
// Insertamos la fila
$inserta = "INSERT INTO Personas (Nombre,Apellido,Anio) VALUES ('$Nombre','$Apellido','$fecha')";
mysqli_query($conexion,$inserta);
// Obtenemos el id del ultimo insert
$ultimo_inser = mysqli_insert_id($conexion);
// Obtenemos la cantidad insertados en el año pertinente
$CodigoUnico= "SELECT * FROM Personas WHERE YEAR(Anio)=".$ano." ";
if ($result = mysqli_query($conexion, $CodigoUnico)) {
/* determinar el número de filas del resultado */
$row_cnt = mysqli_num_rows($result);
/* cerrar el resulset */
mysqli_free_result($result);
}
// Damos formato al campo CodigoUnico // CODIGO-AÑO-ID. Ejemplo: N-2015-548
$CodigoUnico = $row_cnt."-".$ano."-".$ultimo_inser;
// Actualizamos el campo del CodigoUnico del ultimo INSERT
$upsate = "UPDATE Personas SET CodigoUnico = '$CodigoUnico' WHERE idp = '$ultimo_inser'";
mysqli_query($conexion,$upsate);
// Mostramos resultados
if($upsate){
echo "Listo <br/>";
echo "ID es: " . $ultimo_inser."<br/>";
echo "CodigoUnico: " . $CodigoUnico." (CantidadAnual-Año-ID)<br/>";
} else {echo "Error: <br>" . mysqli_error($conexion);}
// Cerramos la conexion
mysqli_close($conexion);
?>
Resultado
Código TEXT:
Ver original|id|CodigoUnico|Anio|Nombre|Apellido
|15|1-2017-15|2017-01-13 00:00:00|pedro|pinto
|16|2-2017-16|2017-01-13 00:00:00|pedro|pinto
|17|3-2017-17|2017-01-13 00:00:00|pedro|pinto
|18|4-2017-18|2017-01-13 00:00:00|pedro|pinto
|19|1-2015-19|2015-01-13 00:00:00|pedro|pinto
|20|2-2015-20|2015-01-13 00:00:00|pedro|pinto
|21|3-2015-21|2015-01-13 00:00:00|pedro|pinto
|47|1-2018-47|2018-01-13 00:00:00|pedro|pinto
|48|2-2018-48|2018-01-13 00:00:00|pedro|pinto
|49|3-2018-49|2018-01-13 00:00:00|pedro|pinto