Comunidad de diseño web y desarrollo en internet online

numeración que reinicie cada año

Citar            
MensajeEscrito el 05 Jun 2017 04:27 am
Hola a Todos tengo al siguiente inquietud..

tengo un sistema que tiene un campo en la tabla llamado numero dicho campos e va agregando un numero el cual se le adicionan unos ceros a la izquierda mas el año así:

000001-2017
el siguiente que se desea agregar hace una consulta a esa tabla y dependiendo el numero que este allí le adiciona un numero mas para crear una numeración consecutiva..

000002-2017
000003-2017 etc...

Este sistema lo logro así:

Código PHP :

<?php
$anof=date('Y');
?>
<?php
$dbName   = "basededatos";//nombre de la Base de datos
$username = "usuario";//usuario
$password = "contrasena";//contraseña
$tabla = "tabla";
$hostname = "localhost";

mysql_connect($hostname,$username,$password) or
print "Error en la Conexión";

mysql_select_db("$dbName") or print "Error en la Base de datos";

$sql="select numero from $tabla order by id desc limit 0,1";
$result=mysql_query($sql);
$array=mysql_fetch_array($result);
//-------------JUGANDO UN POCO CON LAS VARIABLES-------------------------------------------------
$nume=$array["numero"];
$nume2=$nume+1;
//poner ceros a la izquierda-----------------------------------------------
$nume3=str_pad($nume2, 5, "0", STR_PAD_LEFT);
?>


En el campo del formulario numero pongo como valor inicial <? echo $nume3 ?> para que muestre el numero que sigue como lo indique arriba y lo pongo solo lectura de esta manera la numeración va consecutivamente (fuera del campo ID que es autoincrement)

pero quiero que al pasar de año es decir 2018 por ejemplo, este contador enumere nuevamente desde 1 es decir asi:

000001-2018
... etc....

hora modificando un poco el código y jugando mucho mas con las variables y creando condicionales adicionales y usando un ingenio poco ortodoxo he puestos algo así como un enredo total atreviéndome a lo desconocido... para tratar de crear lo que necesito... al parecer funciona pero será la mejor manera

Código PHP :

<?php 
$anof=date('Y');
//$anof="2017";
//creao un adicional para mostrar el año siguiente al actual
$anosig=date("Y",strtotime(" +1 year"));
?>
<?php
$dbName   = "basededatos";//nombre de la Base de datos
$username = "usuario";//usuario
$password = "contrasena";//contraseña
$tabla = "tabla";
$hostname = "localhost";

mysql_connect($hostname,$username,$password) or
print "Error en la Conexión";

mysql_select_db("$dbName") or print "Error en la Base de datos";

$sql="select numero from $tabla order by id desc limit 0,1";
$result=mysql_query($sql);
$array=mysql_fetch_array($result);
$nume=$array["numero"];
$nume2=$nume+1;
$nume6=1;
//poner ceros a la izquierda
$nume3=str_pad($nume2, 5, "0", STR_PAD_LEFT);
$nume6=str_pad($nume6, 5, "0", STR_PAD_LEFT);
//$nume4=$nume3."-".$anof;
//  2017    2018 ------------------
if($anof<=$anosig){
    $nume4=$nume3."-".$anof;
}else{
   $nume4=$nume6."-".$anof;
}
?>


sera esta la mejor manera para crearlo sera que al cambiar el año pasa reinicia esta numeración.....

Gracias espero ayuda---------------- perdonen mi manera de codificar soy tosco aun para esto

Por flashtrix

21 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 17 Jun 2017 11:24 pm
Se me ocurre que puedes tener un problema si hay varios usuarios visitando la página al mismo tiempo... ¿qué pasa si dos personas generan el, por ejemplo 0001-2017 a la vez? Deberías manejar este campo como algo suerte de autonumérico...

Algo que podrías hacer es usar el id como numerador, sabiendo en qué año se generó cada registro puedes restar el id más grande del año anterior para saber cuál es el número que le corresponde al registro actual.

Algo como decir que si se genera el registro 265 en el 2018 y el último del 2017 es el 264, entonces 265-2018 es en realidad 001-2018.

Por mchojrin

37 de clabLevel



Genero:Masculino  

Ayudo desarrolladores PHP a acelerar su llegada a Sr.

chrome
Citar            
MensajeEscrito el 26 Feb 2018 10:44 pm
Hola Gracias por responder realice los cambios como me lo pides:

Solucion escribió:


Algo que podrías hacer es usar el id como numerador, sabiendo en qué año se generó cada registro puedes restar el id más grande del año anterior para saber cuál es el número que le corresponde al registro actual.


pero no entendi muy bien esta parte:

Solucion 2 escribió:

Algo como decir que si se genera el registro 265 en el 2018 y el último del 2017 es el 264, entonces 265-2018 es en realidad 001-2018.


podrías explicármelo Muchas Gracias

Por flashtrix

21 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 26 Feb 2018 11:29 pm
La idea es hacer la transformación del número "real" (265-2018) que está en la base de datos al "virtual" (0001-2018) al momento de mostrarlo.

Sería algo como hacer un primer select tipo:

SELECT id FROM tabla WHERE year = 2017 ORDER BY id DESC LIMIT 1

Con esto te quedas con el id más grande del año 2017 (llamémosle $ultimo) y a partir de ahí, cuando selecciones los registros del año actual:

SELECT * FROM tabla WHERE year = 2018

Antes de mostrarlo haces algo como:

echo "<td>".$row['id'] - $ultimo."-2018</td>"

¿Me expliqué mejor?

Por mchojrin

37 de clabLevel



Genero:Masculino  

Ayudo desarrolladores PHP a acelerar su llegada a Sr.

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.