Foros del Web » Programando para Internet » PHP »

Ayudita con el ID inicio del año empezar otra vez

Estas en el tema de Ayudita con el ID inicio del año empezar otra vez en el foro de PHP en Foros del Web. Hola a todos Tengo el siguiente problemilla, este es el codigo en funcionamiento, que se genera un codigo unico, en un campo adicional, donde al ...

  #1 (permalink)  
Antiguo 06/01/2016, 20:02
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 555
Antigüedad: 15 años, 2 meses
Puntos: 4
Ayudita con el ID inicio del año empezar otra vez

Hola a todos
Tengo el siguiente problemilla, este es el codigo en funcionamiento,
que se genera un codigo unico, en un campo adicional, donde al final
solo guarda, el CODIGO-AÑO + ID segun se incremente el ID

Resultado:
CODIGO-2015-1
CODIGO-2015-2
ETC...

Código PHP:
Ver original
  1. <?
  2.     include_once('conectar.php'); // Conexion
  3.     $conexion = mysqli_connect($dbhost,$dbuser,$dbpass,$dbdatabase) or die ('error');   // Verificar Conexión
  4.     if (!$conexion) {   die("Error de conexión: " . mysqli_connect_error());    }
  5.     if (isset($_POST['action']) && $_POST['action'] == 'add')
  6.     {
  7.     if (isset($_GET['idp']))    $idp = $_GET['idp']; // ID de Personas
  8.     $Nombre = $_POST['Nombre'];
  9.     $Apellido = $_POST['Apellido'];
  10.     $Anio = $_POST['Anio'];
  11.     $CodigoUnico = $_POST['CodigoUnico'];
  12.     $inserta = $db->query("INSERT INTO Personas (Nombre,Apellido,Anio,CodigoUnico) VALUES ('$Nombre','$Apellido','$Anio','')");
  13.     $ultima = mysqli_insert_id($db);
  14.     $dato = "CODIGO-".date("Y")."-".$ultima;  // Resultado CODIGO-2015-ID = CODIGO-2015-1
  15.     $actu = $db->query("UPDATE Personas SET CodigoUnico = '$dato' WHERE id = '$ultima'");
  16.     if($actu){        
  17.     echo "Listo";
  18.     echo "ID es: " . $ultima; // AQUI SOLO ME MUESTRA EL ID INGRESADO AL DB
  19.     } else {
  20.     echo "Error: " . $SQL . "<br>" . mysqli_error($conexion);
  21. }
  22. }
  23. ?>

En un inicio esto era funcional, pero la idea es que empiece el codigo cada año,
Al final este codigo ya no es util para lo que necesito me ayuden/guien/oriente,

Mas o menos un ejemplo:
CODIGO-2016-1, CODIGO-2016-2, CODIGO-2016-3, Y EL CODIGO FINAL DEL AÑO DICIEMBRE 31
Seria como ejemplo, CODIGO-2016-5333 Y EL DIA 1ro ENERO DEL SIGUENTE AÑO EMPIECE,
mas o menos asi, CODIGO-2017-1, CODIGO-2017-2, CODIGO-2017-3, CODIGO-2017-4

El punto es crear un codigo unico que se incremente como un contador tal vez, ejemplo;
CODIGO-2016-1, CODIGO-2016-2, CODIGO-2016-3, Al llegar al Año 2017 empiece de UNO,
mas o menos asi, CODIGO-2017-1, CODIGO-2017-2, CODIGO-2017-3, con el fin que cada año
empiece otra vez de UNO,

Al crear el USUARIO vaya generando el numero en orden, 1,2,3 etc. con su codigo al
terminar el año y empieza otra vez, con un nuevo año..., podria ser restando o sumando el ID
con el año pasado, la verdad no sabria como resolver este problemilla.


NOTA: El codigo unico es la palabra mas un numero.
  #2 (permalink)  
Antiguo 06/01/2016, 20:54
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 4 años, 1 mes
Puntos: 39
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Una forma y la más rápida que pienso, sería recuperar el Código único del último usuario registrado. Por ejemplo sería CODIGO-2015-1480, con la función substr:

y ahí en el código php hacer un condicional que quedaría algo así.

Si es 1ero de enero, crear la cadena
"CODIGO-AÑO-1".
Si no es 1ero de enero
Código PHP:
Ver original
  1. <?php
  2.     $codUnico = "CODIGO-2015-1480"; //ultimo codigo unico recuperado de la base de dato    
  3.     $buscarCodigo = strrpos($codUnico, '-')+1; // busca la posición del último guion medio y le añade 1
  4.     $codigo = substr($codUnico, $buscarCodigo); // recupera lo que está después del ultimo guión, que sería el código (1480)
  5.     $codNuevo = $codigo + 1; // añade 1 al código anterior
  6.     $dato = "CODIGO-".date("Y")."-".$codNuevo; // te devolvería 1481
  7.     echo $dato;
  8.     ?>

Última edición por rodocoyote15; 06/01/2016 a las 21:03
  #3 (permalink)  
Antiguo 06/01/2016, 22:32
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 555
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Cita:
Iniciado por rodocoyote15 Ver Mensaje
Una forma y la más rápida que pienso, sería recuperar el Código único del último usuario registrado. Por ejemplo sería CODIGO-2015-1480, con la función substr:

y ahí en el código php hacer un condicional que quedaría algo así.

Si es 1ero de enero, crear la cadena
"CODIGO-AÑO-1".
Si no es 1ero de enero
Código PHP:
Ver original
  1. <?php
  2.     $codUnico = "CODIGO-2015-1480"; //ultimo codigo unico recuperado de la base de dato    
  3.     $buscarCodigo = strrpos($codUnico, '-')+1; // busca la posición del último guion medio y le añade 1
  4.     $codigo = substr($codUnico, $buscarCodigo); // recupera lo que está después del ultimo guión, que sería el código (1480)
  5.     $codNuevo = $codigo + 1; // añade 1 al código anterior
  6.     $dato = "CODIGO-".date("Y")."-".$codNuevo; // te devolvería 1481
  7.     echo $dato;
  8.     ?>
Hola rodocoyote15, mil gracias por responder pronto,

Si efectivamente me da CODIGO-2016-1481 agrege otro usuario y me da CODIGO-2016-1482, etc..
pero no me da CODIGO-2016-1, CODIGO-2016-2, CODIGO-2016-3 etc.
esta muy cerca a la solucion, pero que podria estar ser?

Ahora
CODIGO-2016-1481, CODIGO-2016-1482, CODIGO-2016-1483 etc

Respuesta
CODIGO-2016-1, CODIGO-2016-2, CODIGO-2016-3 etc.

El campo "CodigoUnico" que esta en mi DB se crea con el mismo ID.
¿Este campo es lo que hace todo este proceso para que cada primero de enero
empiece de cero?

NOTA: Este nuevo metodo de respuesta lo agregare en un campo nuevo,
para que este como predeterminado, y el que esta creado como "CodigoUnico"
queda para hacer la consulta para solucionarlo.
  #4 (permalink)  
Antiguo 06/01/2016, 23:13
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.433
Antigüedad: 8 años, 2 meses
Puntos: 934
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Esto puede servirte.

Un saludo
__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #5 (permalink)  
Antiguo 07/01/2016, 20:46
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 555
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Cita:
Iniciado por Alexis88 Ver Mensaje
Esto puede servirte.

Un saludo
Hola Alexis88, gracias por responder
Pero lo veo complicado y como lo integraria a lo que ya tengo??
es decir como puedo generar la consulta
  #6 (permalink)  
Antiguo 07/01/2016, 21:06
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 4 años, 1 mes
Puntos: 39
Respuesta: Ayudita con el ID inicio del año empezar otra vez

@pilucho creo que he perdido el hilo con tu última respuesta. Podrías por ejemplo crear una condicional con lo que necesitarías? En pseudocódigo para poder ayudarte mejor. Saludos
  #7 (permalink)  
Antiguo 07/01/2016, 21:16
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 555
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Ayudita con el ID inicio del año empezar otra vez

He probado asi, y siempre me da 1,
tambien he puesto el campo donde guardo el codigo, año mas el ID,
Aqui $CodigoUnico guardo esto CODIGO-2015-4591,
que deberia mostrar el año 2016 desde uno se crea otro
y siga dos, luego tres etc hasta que llegue el proximo año otra vez a UNo
como logro eso?


Codigo que probe me da siempre uno, CODIGO-2016-1
creo otro y sigue el mismo. CODIGO-2016-1
Código PHP:
Ver original
  1. <?php
  2.     $CodigoUnico = "$CodigoUnico"; //ultimo codigo unico recuperado de la base de dato    
  3.     $buscarCodigo = strrpos($CodigoUnico, '-')+1; // busca la posición del último guion medio y le añade 1
  4.     $codigo = substr($CodigoUnico, $buscarCodigo); // recupera lo que está después del ultimo guión, que sería el código (1480)
  5.     $codNuevo = $codigo + 1; // añade 1 al código anterior
  6.     $dato = "CODIGO-".date("Y")."-".$codNuevo; // te devolvería 1481
  7.     echo $dato;
  8.     ?>
  #8 (permalink)  
Antiguo 07/01/2016, 21:33
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 4 años, 1 mes
Puntos: 39
Respuesta: Ayudita con el ID inicio del año empezar otra vez

A ver. Voy a entenderte. Esto es lo que tratas de hacer?
Cita:
SI ES 1ERO DE ENERO. {
SI NO HAY NINGUN USUARIO REGISTRADO ESTE AÑO
DEVOLVER "CODIGO-AÑO-1".
SI YA HAY AL MENOS UN USUARIO ESTE AÑO
DEVOLVER "CODIGO-AÑO-(codigo del anterior usuario+ 1)
}
SI NO ES PRIMERO DE ENERO{
DEVOLVER "CODIGO-AÑO-(codigo del anterior usuario + 1) }
  #9 (permalink)  
Antiguo 07/01/2016, 21:35
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.433
Antigüedad: 8 años, 2 meses
Puntos: 934
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Cita:
Iniciado por pilucho Ver Mensaje
como lo integraria a lo que ya tengo?
Esa consulta SQL te será útil cuando agregues un nuevo dato, de tal forma que se generará el código correlativo por año. En el ejemplo, solo se genera el código, por lo que para tu caso solo tendrías que añadir el resto de campos y valores a insertar.

Un saludo
__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #10 (permalink)  
Antiguo 07/01/2016, 21:44
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 555
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Cita:
Iniciado por rodocoyote15 Ver Mensaje
A ver. Voy a entenderte. Esto es lo que tratas de hacer?
Gracias por responder rodocoyote15

Es lo siguiente
Tengo una cantidad de usuarios,
ejemplo: 4588, usuarios creados,
en el año 2015.

y el codigo unico seria asi:
CODIGO-2015-4588
que se crea con el mismo ID


El punto es que cuando llegue el año 2016
empiece otra vez desde CERO ejemplo
CODIGO-2016-1, CODIGO-2016-2, etc..

Para el 2017 otra vez de CERo
CODIGO-2017-1, CODIGO-2017-2, etc..
y asi sucesivamente cada año empiece todo de nuevo.

NOTA: AL momento de crear un USUARIO en el campo "CodigoUnico"
guardo Una Palabra + AÑo + ID ejemplo, CODIGO-AÑO-ID = CODIGO-2015-1
  #11 (permalink)  
Antiguo 07/01/2016, 21:51
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 555
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Cita:
Iniciado por Alexis88 Ver Mensaje
Esa consulta SQL te será útil cuando agregues un nuevo dato, de tal forma que se generará el código correlativo por año. En el ejemplo, solo se genera el código, por lo que para tu caso solo tendrías que añadir el resto de campos y valores a insertar.

Un saludo
Hola Alexis88

Lo vi algo complicado pero intente cambiar los datos
pero no resulta nada es decir no guarda ni me muestra el resultado
de la consulta o sea que esta mal?

Código PHP:
Ver original
  1. INSERT INTO Personas (Nombre,Apellido,Anio,CodigoUnico) VALUES (
  2.     IF ((SELECT COUNT(*) FROM Personas AS alias1) > 0 AND SUBSTRING((SELECT * FROM Personas AS alias2 ORDER BY Nombre,Apellido,Anio,CodigoUnico DESC LIMIT 1), 1, 5) = YEAR(CURDATE()),
  3.         CONCAT(
  4.             YEAR(CURDATE()),
  5.             '-',
  6.             CONVERT(
  7.                 SUBSTRING((SELECT * FROM Personas AS alias3 ORDER BY Nombre,Apellido,Anio,CodigoUnico DESC LIMIT 1), 6),
  8.                 UNSIGNED INTEGER
  9.             ) + 1
  10.         ),
  11.         CONCAT(YEAR(CURDATE()), '-', 1)
  12.     )
  13. )
  #12 (permalink)  
Antiguo 07/01/2016, 22:00
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 4 años, 1 mes
Puntos: 39
Respuesta: Ayudita con el ID inicio del año empezar otra vez

En este ejemplo, tomo como que estamos en el 2017. :D

Código PHP:
Ver original
  1. <?php
  2. if(date("d/m") == "01/01"){
  3.     $codQuery = "CONSULTA A BD PARA OBTENER ULTIMO ID";
  4.    while($fila = mysqli_fetch_array($codQuery) ) {
  5.      if( strpos($fila['codigoUnico'],date("Y") ) ){ // Si en el ultimo ID esta el 2017
  6.         $codUnico = $fila['codigoUnico']; //ultimo codigo unico recuperado de la base de dato    
  7.         $buscarCodigo = strrpos($codUnico, '-')+1; // busca la posición del último guion medio y le añade 1
  8.         $codigo = substr($codUnico, $buscarCodigo); // recupera lo que está después del ultimo guión, que sería el código (1480)
  9.         $codNuevo = $codigo + 1; // añade 1 al código anterior
  10.         echo $dato = "CODIGO-".date("Y")."-".$codNuevo; // te devolvería
  11.      }//2if    
  12.  
  13.      }
  14.     else{ // Si el ultimo ID tiene el año 2016.
  15.       echo $dato = "CODIGO-".date("Y")."-1";
  16.     }//2else
  17.  
  18. } // 1if
  19.  
  20. else{        
  21.         $buscarCodigo = strrpos($codUnico, '-')+1; // busca la posición del último guion medio y le añade 1
  22.         $codigo = substr($codUnico, $buscarCodigo); // recupera lo que está después del ultimo guión, que sería el código (1480)
  23.         $codNuevo = $codigo + 1; // añade 1 al código anterior
  24.         $dato = "CODIGO-".date("Y")."-".$codNuevo; // te devolvería 1481
  25.         echo $dato;
  26.         }// while
  27.  
  28. }//1else
  29.         ?>
Quizá esto sirva, lo hice sin revisar. Si tiene errores, comentas

Edito. Me hizo falta una condicional para: Si hoy no es primero de enero, pero aun no hay un registro con este año. Saludos :D
  #13 (permalink)  
Antiguo 07/01/2016, 22:08
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 555
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Cita:
Iniciado por rodocoyote15 Ver Mensaje
En este ejemplo, tomo como que estamos en el 2017. :D

Código PHP:
Ver original
  1. <?php
  2. if(date("d/m") == "01/01"){
  3.     $codQuery = "CONSULTA A BD PARA OBTENER ULTIMO ID";
  4.    while($fila = mysqli_fetch_array($codQuery) ) {
  5.      if( strpos($fila['codigoUnico'],date("Y") ) ){ // Si en el ultimo ID esta el 2017
  6.         $codUnico = $fila['codigoUnico']; //ultimo codigo unico recuperado de la base de dato    
  7.         $buscarCodigo = strrpos($codUnico, '-')+1; // busca la posición del último guion medio y le añade 1
  8.         $codigo = substr($codUnico, $buscarCodigo); // recupera lo que está después del ultimo guión, que sería el código (1480)
  9.         $codNuevo = $codigo + 1; // añade 1 al código anterior
  10.         echo $dato = "CODIGO-".date("Y")."-".$codNuevo; // te devolvería
  11.      }//2if    
  12.  
  13.      }
  14.     else{ // Si el ultimo ID tiene el año 2016.
  15.       echo $dato = "CODIGO-".date("Y")."-1";
  16.     }//2else
  17.  
  18. } // 1if
  19.  
  20. else{        
  21.         $buscarCodigo = strrpos($codUnico, '-')+1; // busca la posición del último guion medio y le añade 1
  22.         $codigo = substr($codUnico, $buscarCodigo); // recupera lo que está después del ultimo guión, que sería el código (1480)
  23.         $codNuevo = $codigo + 1; // añade 1 al código anterior
  24.         $dato = "CODIGO-".date("Y")."-".$codNuevo; // te devolvería 1481
  25.         echo $dato;
  26.         }// while
  27.  
  28. }//1else
  29.         ?>
Quizá esto sirva, lo hice sin revisar. Si tiene errores, comentas

Edito. Me hizo falta una condicional para: Si hoy no es primero de enero, pero aun no hay un registro con este año. Saludos :D




Error aqui
else{ // Si el ultimo ID tiene el año 2016.

y aqui

}//1else
?>

Código PHP:
Ver original
  1. <?php
  2. if(date("d/m") == "01/01"){
  3. $codQuery = "INSERT INTO Personas (Nombre,Apellido,Anio,CodigoUnico) VALUES ('$Nombre','$Apellido','$Anio','')";
  4. while($fila = mysqli_fetch_array($codQuery) ) {
  5. if( strpos($fila['codigoUnico'],date("Y") ) ){ // Si en el ultimo ID esta el 2017
  6. $codUnico = $fila['codigoUnico']; //ultimo codigo unico recuperado de la base de dato
  7. $buscarCodigo = strrpos($codUnico, '-')+1; // busca la posición del último guion medio y le añade 1
  8. $codigo = substr($codUnico, $buscarCodigo); // recupera lo que está después del ultimo guión, que sería el código (1480)
  9. $codNuevo = $codigo + 1; // añade 1 al código anterior
  10. echo $dato = "CODIGO-".date("Y")."-".$codNuevo; // te devolvería
  11. }//2if
  12.  
  13. }
  14. else{ // Si el ultimo ID tiene el año 2016.
  15. echo $dato = "CODIGO-".date("Y")."-1";
  16. }//2else
  17.  
  18. } // 1if
  19.  
  20. else{
  21. $buscarCodigo = strrpos($codUnico, '-')+1; // busca la posición del último guion medio y le añade 1
  22. $codigo = substr($codUnico, $buscarCodigo); // recupera lo que está después del ultimo guión, que sería el código (1480)
  23. $codNuevo = $codigo + 1; // añade 1 al código anterior
  24. $dato = "CODIGO-".date("Y")."-".$codNuevo; // te devolvería 1481
  25. echo $dato;
  26. }// while
  27.  
  28. }//1else
  29. ?>
  #14 (permalink)  
Antiguo 07/01/2016, 22:25
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 555
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Como me podria funcionar ESTO con mi base de datos que ya tengo
por que no logro que funcione y guardara el ultimo ID???

Hay alguna forma mas simple que de la solucion?
olvide comentar que en el VALUES (... dejo vacio el campo "CodigoUnico"
para que al momento de hacer el UPDATE
Guarde el, CodigoUnico con el ID ingresado,

Código PHP:
Ver original
  1. INSERT INTO Personas (Nombre,Apellido,Anio,CodigoUnico) VALUES (
  2.     IF ((SELECT COUNT(*) FROM Personas AS alias1) > 0 AND SUBSTRING((SELECT * FROM Personas AS alias2 ORDER BY Nombre,Apellido,Anio,CodigoUnico DESC LIMIT 1), 1, 5) = YEAR(CURDATE()),
  3.         CONCAT(
  4.             YEAR(CURDATE()),
  5.             '-',
  6.             CONVERT(
  7.                 SUBSTRING((SELECT * FROM Personas AS alias3 ORDER BY Nombre,Apellido,Anio,CodigoUnico DESC LIMIT 1), 6),
  8.                 UNSIGNED INTEGER
  9.             ) + 1
  10.         ),
  11.         CONCAT(YEAR(CURDATE()), '-', 1)
  12.     )
  13. )
  #15 (permalink)  
Antiguo 07/01/2016, 22:41
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.433
Antigüedad: 8 años, 2 meses
Puntos: 934
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Lo único que necesitabas añadir eran los campos entre los paréntesis de la primera línea:
Código MySQL:
Ver original
  1. INSERT INTO tabla (código correlativo, campo2, campo3, campoN) VALUES (

Y los valores a añadir, aparte del código correlativo, que deben ir separados por comas luego del paréntesis de cierre de la penúltima línea:
Código MySQL:
Ver original
  1. ), "valor del campo2", "valor del campo3", "valor del campoN"
  2. )

El resto debe quedar como estaba originalmente, obviamente reemplazando los nombres de las tablas y campos por los tuyos.

Un saludo
__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #16 (permalink)  
Antiguo 07/01/2016, 22:51
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 555
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Cita:
Iniciado por Alexis88 Ver Mensaje
Lo único que necesitabas añadir eran los campos entre los paréntesis de la primera línea:
Código MySQL:
Ver original
  1. INSERT INTO tabla (código correlativo, campo2, campo3, campoN) VALUES (

Y los valores a añadir, aparte del código correlativo, que deben ir separados por comas luego del paréntesis de cierre de la penúltima línea:
Código MySQL:
Ver original
  1. ), "valor del campo2", "valor del campo3", "valor del campoN"
  2. )

El resto debe quedar como estaba originalmente, obviamente reemplazando los nombres de las tablas y campos por los tuyos.

Un saludo
Asi?

Código PHP:
Ver original
  1. INSERT INTO Personas (Nombre,Apellido,Anio,CodigoUnico) VALUES (
  2.     IF ((SELECT COUNT(*) FROM Personas AS alias1) > 0 AND SUBSTRING((SELECT * FROM Personas AS alias2 ORDER BY Nombre,Apellido,Anio,CodigoUnico DESC LIMIT 1), 1, 5) = YEAR(CURDATE()),
  3.         CONCAT(
  4.             YEAR(CURDATE()),
  5.             '-',
  6.             CONVERT(
  7.                 SUBSTRING((SELECT * FROM Personas AS alias3 ORDER BY Nombre,Apellido,Anio,CodigoUnico DESC LIMIT 1), 6),
  8.                 UNSIGNED INTEGER
  9.             ) + 1
  10.         ),
  11.         CONCAT(YEAR(CURDATE()), '-', 1)
  12.     )
  13. )

el código correlativo que mensionas creo un campo con ese nombre?? y este codigo guardara el ultimo ID tambien??
no entendi.


Aun que se me ocurre que podria crearse solo un selecc donde el campo
CodigoUnico ya tenga CODIGO-2015-1, CODIGO-2016-2 etc..
y ese selecc compare el año y el numero del ID y se inicie de
nuevo si el año es 2016 y se quedo en CODIGO-2015-8768,
empice otra vez a CODIGO-2016-1
y los años siguientes CODIGO-2017-1, CODIGO-2017-2 etc..
y asi cada año que vaya creciendo

es posible eso?? creo que seria una opcion a mi problema si es que existe claro.
  #17 (permalink)  
Antiguo 07/01/2016, 22:57
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.433
Antigüedad: 8 años, 2 meses
Puntos: 934
Respuesta: Ayudita con el ID inicio del año empezar otra vez

El código correlativo es el código de tu tabla, que bien puede ser la clave primaria. Es el campo que almacenará el código identificador de cada registro. Como también te dije, a excepción de las dos líneas que señalé en mi anterior comentario, lo único que debes modificar es el nombre del campo del código y el de la tabla en el código que se encuentra entre esas líneas.

Por ejemplo, en la línea 7, debería quedar más o menos así:
Código MySQL:
Ver original
  1. SUBSTRING((SELECT campo del código FROM tu tabla AS alias3 ORDER BY campo del código DESC LIMIT 1), 6),

Y en la primera línea, el campo del código debe ir al inicio, no al final, como lo estás colocando. Trata de fijarte bien en el orden.
__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #18 (permalink)  
Antiguo 07/01/2016, 23:05
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 555
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Cita:
Iniciado por Alexis88 Ver Mensaje
El código correlativo es el código de tu tabla, que bien puede ser la clave primaria. Es el campo que almacenará el código identificador de cada registro. Como también te dije, a excepción de las dos líneas que señalé en mi anterior comentario, lo único que debes modificar es el nombre del campo del código y el de la tabla en el código que se encuentra entre esas líneas.

Por ejemplo, en la línea 7, debería quedar más o menos así:
Código MySQL:
Ver original
  1. SUBSTRING((SELECT campo del código FROM tu tabla AS alias3 ORDER BY campo del código DESC LIMIT 1), 6),

Y en la primera línea, el campo del código debe ir al inicio, no al final, como lo estás colocando. Trata de fijarte bien en el orden.
Ah entonces es mi codigo ID autoincremente lo que te referias

por otro lado algo asi me dices? pero guarda el ultimo ID ? como mas arriba muestro en el codigo?? o es un nuevo insert al mi DB?

o sea creo otro formulario PHP¿¿

Código PHP:
Ver original
  1. INSERT INTO Personas (Nombre,Apellido,Anio,CodigoUnico) VALUES (
  2.     IF ((SELECT COUNT(*) FROM Personas AS alias1) > 0 AND SUBSTRING((SELECT * FROM Personas AS alias2 ORDER BY Nombre,Apellido,Anio,CodigoUnico DESC LIMIT 1), 1, 5) = YEAR(CURDATE()),
  3.         CONCAT(
  4.             YEAR(CURDATE()),
  5.             '-',
  6.             CONVERT(
  7.                 SUBSTRING((SELECT CodigoUnico FROM Personas AS alias3 ORDER BY CodigoUnico DESC LIMIT 1), 6),
  8.                 UNSIGNED INTEGER
  9.             ) + 1
  10.         ),
  11.         CONCAT(YEAR(CURDATE()), '-', 1)
  12.     )
  13. )
  #19 (permalink)  
Antiguo 07/01/2016, 23:17
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 555
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Ayudita con el ID inicio del año empezar otra vez

rodocoyote15 y Alexis88 creen que me podrian brindar un ejemplo como deberia
ser una solucion las ideas esta muy bien pero no me resulta que podria estar haciendo mal
  #20 (permalink)  
Antiguo 08/01/2016, 00:20
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.433
Antigüedad: 8 años, 2 meses
Puntos: 934
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Cita:
Iniciado por pilucho Ver Mensaje
Ah entonces es mi codigo ID autoincremente lo que te referias
Ya no tiene que ser autoincrementable sino de tipo cadena.

Cita:
Iniciado por pilucho Ver Mensaje
por otro lado algo asi me dices? pero guarda el ultimo ID ? como mas arriba muestro en el codigo?? o es un nuevo insert al mi DB?
El objetivo de esa consulta SQL es insertar un nuevo registro en la BD generando un código correlativo con respecto al año actual.

Cita:
Iniciado por pilucho Ver Mensaje
Código MySQL:
Ver original
  1. INSERT INTO Personas (Nombre,Apellido,Anio,CodigoUnico) VALUES (
  2.     IF ((SELECT COUNT(*) FROM Personas AS alias1) > 0 AND SUBSTRING((SELECT * FROM Personas AS alias2 ORDER BY Nombre,Apellido,Anio,CodigoUnico DESC LIMIT 1), 1, 5) = YEAR(CURDATE()),
De esa sección, en la primera línea, el campo "CodigoUnico" debe ir al inicio, no al final. En la segunda línea, solo necesitas trabajar con el campo "CodigoUnico" pues desde la condición se generará el código correlativo.

Cita:
Iniciado por pilucho Ver Mensaje
Código MySQL:
Ver original
  1. CONCAT(YEAR(CURDATE()), '-', 1)
  2.     ), "otro valor", "otro valor", "otro valor"
  3. )
A partir del penúltimo paréntesis de cierre, debes de colocar los demás valores a insertar, separados por comas, tal y como puedes apreciarlo.
__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #21 (permalink)  
Antiguo 08/01/2016, 21:14
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 555
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Cita:
Iniciado por Alexis88 Ver Mensaje
Ya no tiene que ser autoincrementable sino de tipo cadena.


El objetivo de esa consulta SQL es insertar un nuevo registro en la BD generando un código correlativo con respecto al año actual.


De esa sección, en la primera línea, el campo "CodigoUnico" debe ir al inicio, no al final. En la segunda línea, solo necesitas trabajar con el campo "CodigoUnico" pues desde la condición se generará el código correlativo.


A partir del penúltimo paréntesis de cierre, debes de colocar los demás valores a insertar, separados por comas, tal y como puedes apreciarlo.
la verdad es que no logro comprender bien el tema, como que ya no tiene que ser ID de autoincremente es decir debo crear una tabla nueva para lo que necesito? y que sucede con todo el contenido que se maneja en el present??


o sea donde van esos otros campos?
  #22 (permalink)  
Antiguo 08/01/2016, 21:16
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 555
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Actualmente esta asi, y no guarda nada en el DB y todo los valores a CERO o sea que paso???????
Código PHP:
Ver original
  1. <?
  2.     include_once('conectar.php'); // Conexion
  3.     $conexion = mysqli_connect($dbhost,$dbuser,$dbpass,$dbdatabase) or die ('error');   // Verificar Conexión
  4.     if (!$conexion) {   die("Error de conexión: " . mysqli_connect_error());    }
  5.     if (isset($_POST['action']) && $_POST['action'] == 'add')
  6.     {
  7.     if (isset($_GET['idp']))    $idp = $_GET['idp']; // ID de Personas
  8.     $Nombre = $_POST['Nombre'];
  9.     $Apellido = $_POST['Apellido'];
  10.     $Anio = $_POST['Anio'];
  11.     $CodigoUnico = $_POST['CodigoUnico'];
  12.     //$inserta = $db->query("INSERT INTO Personas (Nombre,Apellido,Anio,CodigoUnico) VALUES ('$Nombre','$Apellido','$Anio','')");
  13.    
  14.     $inserta = $db->query("INSERT INTO Personas (Nombre,Apellido,Anio,CodigoUnico) VALUES (
  15.    IF ((SELECT COUNT('$Nombre','$Apellido','$Anio','') FROM Personas AS alias1) > 0 AND SUBSTRING((SELECT * FROM Personas AS alias2 ORDER BY CodigoUnico DESC LIMIT 1), 1, 5) = YEAR(CURDATE()),
  16.        CONCAT(
  17.            YEAR(CURDATE()),
  18.            '-',
  19.            CONVERT(
  20.                SUBSTRING((SELECT CodigoUnico FROM Personas AS alias3 ORDER BY CodigoUnico DESC LIMIT 1), 6),
  21.                UNSIGNED INTEGER
  22.            ) + 1
  23.        ),
  24.        CONCAT(YEAR(CURDATE()), '-', 1)
  25.    )
  26. )");
  27.  
  28.     $ultima = mysqli_insert_id($db);
  29.     $dato = "CODIGO-".date("Y")."-".$ultima;  // Resultado CODIGO-2015-ID = CODIGO-2015-1
  30.     $actu = $db->query("UPDATE Personas SET CodigoUnico = '$dato' WHERE id = '$ultima'");
  31.     if($actu){        
  32.     echo "Listo";
  33.     echo "ID es: " . $ultima; // AQUI SOLO ME MUESTRA EL ID INGRESADO AL DB
  34.     } else {
  35.     echo "Error: " . $SQL . "<br>" . mysqli_error($conexion);
  36. }
  37. }
  38. ?>

Última edición por pilucho; 08/01/2016 a las 21:24 Razón: code complet
  #23 (permalink)  
Antiguo 08/01/2016, 21:41
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 555
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Ayudita con el ID inicio del año empezar otra vez

alguien tiene una idea que esta mal?? porque sale CERo o otro ejemplo como solucionar mi problema? espero se pueda :(
  #24 (permalink)  
Antiguo 08/01/2016, 22:14
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 4 años, 1 mes
Puntos: 39
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Si me esperas un par de horas, o mañana te ayudo con el código. A ver si también puedo realizarlo.

Ahora no puedo ya que tengo que terminar unos trabajos, desocupandome te ayudo
  #25 (permalink)  
Antiguo 08/01/2016, 22:14
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 555
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Ya solucione el insert ahora si inserta contenido
PERO, en el campo "CodigoUnico" GUARDA todo asi
2016-1, 2016-1, 2016-1, NO se incrementa

DEBERIA ser asi:
CODIGO-2015-9816
CODIGO-2016-1
CODIGO-2016-2
CODIGO-2016-3
ETC....

NO asi
2016-1, 2016-1, 2016-1, 2016-1
ETC..
CODIGO ACTUAL.

Código PHP:
Ver original
  1. <?
  2.     include_once('conectar.php'); // Conexion
  3.     $conexion = mysqli_connect($dbhost,$dbuser,$dbpass,$dbdatabase) or die ('error');   // Verificar Conexión
  4.     if (!$conexion) {   die("Error de conexión: " . mysqli_connect_error());    }
  5.     if (isset($_POST['action']) && $_POST['action'] == 'add')
  6.     {
  7.     if (isset($_GET['idp']))    $idp = $_GET['idp']; // ID de Personas
  8.     $Nombre = $_POST['Nombre'];
  9.     $Apellido = $_POST['Apellido'];
  10.     $Anio = $_POST['Anio'];
  11.     $CodigoUnico = $_POST['CodigoUnico'];
  12.  
  13.     $inserta = $db->query("INSERT INTO Personas (CodigoUnico,Nombre,Apellido,Anio) VALUES (
  14.    IF ((SELECT COUNT(*) FROM Personas AS alias1) > 0 AND SUBSTRING((SELECT CodigoUnico FROM Personas AS alias2 ORDER BY CodigoUnico DESC LIMIT 1), 1, 5) = YEAR(CURDATE()),
  15.        CONCAT(
  16.            YEAR(CURDATE()),
  17.            '-',
  18.            CONVERT(
  19.                SUBSTRING((SELECT CodigoUnico FROM Personas AS alias3 ORDER BY CodigoUnico DESC LIMIT 1), 6),
  20.                UNSIGNED INTEGER
  21.            ) + 1
  22.        ),
  23.        CONCAT(YEAR(CURDATE()), '-', 1)
  24.    ),'$Nombre','$Apellido','$Anio'
  25. )");
  26.  
  27.  
  28.     if($inserta){        
  29.     echo "Listo";
  30.     } else {
  31.     echo "Error: " . $inserta . "<br>" . mysqli_error($conexion);
  32. }
  33. }
  34. ?>
  #26 (permalink)  
Antiguo 08/01/2016, 22:15
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 555
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Cita:
Iniciado por rodocoyote15 Ver Mensaje
Si me esperas un par de horas, o mañana te ayudo con el código. A ver si también puedo realizarlo.

Ahora no puedo ya que tengo que terminar unos trabajos, desocupandome te ayudo

CLARO rodocoyote15 YO ESPERO, Mientras se pueda
solucionar yo le espero, muchas gracias,

Cual fuera el metodo forma de ayudar bienvenido sea,
  #27 (permalink)  
Antiguo 09/01/2016, 00:37
 
Fecha de Ingreso: julio-2011
Ubicación: Los Rios
Mensajes: 138
Antigüedad: 8 años, 6 meses
Puntos: 8
Respuesta: Ayudita con el ID inicio del año empezar otra vez

porque no tomas el año del sistema y lo combinas para tu código:

Código PHP:
Ver original
  1. $cod="CODIGO-".date("Y")

Luego haces una busqueda en tu base de datos los registros que tengan ese codigo:

Código PHP:
Ver original
  1. $sql="SELECT CodigoUnico FROM Personas WHERE CodigoUnico LIKE '".$cod."%'";
  2. $result=mysqli_query($mysqli,$sql); //donde mysqli es tu conexión
  3. $registros=mysqli_num_rows($result)+1;
  4. $nuevo codigo=$cod."-".$registros

Y listo cada año te creara desde 1 los codigos, y con estos datos ya podras almacenarlos donde desees..

PD. la solucion esta orientada a procesos, trabajo mas de esa manera jeje perdon

Espero haber ayudado
__________________
___________________________
Si te ayudo mi respuesta dale al +1
  #28 (permalink)  
Antiguo 09/01/2016, 00:45
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 4 años, 1 mes
Puntos: 39
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Cita:
Iniciado por juancaalbarracin Ver Mensaje
Y listo cada año te creara desde 1 los codigos, y con estos datos ya podras almacenarlos donde desees..

PD. la solucion esta orientada a procesos, trabajo mas de esa manera jeje perdon

Espero haber ayudado
Vale, pero puede haber un conflicto. Si hay 50 usuarios y se eliminan 8, quedarán 42, sin embargo el #42 quien fue el último en registrarse suponiendo, quedara como COD-2016-50 por ejemplo, PERO al ejecutar $sql te devolvera el numero "42" y tendrás "43" como numero para insertar. Entonces quedaría "CODIGO-2016-43", pero si ese fue uno de los usuarios que no se eliminó? Existiría duplicidad o lo pienso mal?
  #29 (permalink)  
Antiguo 09/01/2016, 01:23
 
Fecha de Ingreso: julio-2011
Ubicación: Los Rios
Mensajes: 138
Antigüedad: 8 años, 6 meses
Puntos: 8
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Cita:
Iniciado por rodocoyote15 Ver Mensaje
Vale, pero puede haber un conflicto. Si hay 50 usuarios y se eliminan 8, quedarán 42, sin embargo el #42 quien fue el último en registrarse suponiendo, quedara como COD-2016-50 por ejemplo, PERO al ejecutar $sql te devolvera el numero "42" y tendrás "43" como numero para insertar. Entonces quedaría "CODIGO-2016-43", pero si ese fue uno de los usuarios que no se eliminó? Existiría duplicidad o lo pienso mal?
Tienes toda la razón rodocoyote; entones habra que hacer una modificacion mas:

Código PHP:
Ver original
  1. $sql="SELECT CodigoUnico FROM Personas WHERE CodigoUnico LIKE '".$cod."%' ORDER BY CodigoUnico DESC";
  2. $result=mysqli_query($mysqli,$sql); //donde mysqli es tu conexión
  3. $registros=mysqli_fetch_assoc($result);
  4.  
  5. $parte=explode('-'.$registros['CodigoUnico']);//para separar el codigo en partes
  6. $nuevo=$partes[2]+1;
  7.  
  8. $nuevo codigo=$cod."-".$nuevo

Y ahi si me parece que estaria mejor (me parece que hay una mejor forma de usar el explode pero de esta entiendes exactamente lo que estas haciendo paso a paso)
__________________
___________________________
Si te ayudo mi respuesta dale al +1
  #30 (permalink)  
Antiguo 09/01/2016, 01:25
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.433
Antigüedad: 8 años, 2 meses
Puntos: 934
Respuesta: Ayudita con el ID inicio del año empezar otra vez

Cita:
Iniciado por pilucho Ver Mensaje
Ya solucione el insert ahora si inserta contenido
PERO, en el campo "CodigoUnico" GUARDA todo asi
2016-1, 2016-1, 2016-1, NO se incrementa

DEBERIA ser asi:
CODIGO-2015-9816
CODIGO-2016-1
CODIGO-2016-2
CODIGO-2016-3

NO asi
2016-1, 2016-1, 2016-1, 2016-1
Eso ocurre porque no se está cumpliendo la condición. En el ejemplo que te dí, el código tiene la forma "año-número de orden", siendo los primeros cuatro carácteres los dígitos del año, que es precisamente lo que tomo con la función SUBSTRING(). Entonces, lo que necesitas es simplemente modificar tanto la condición como la línea en la que se toma al último código para así incrementarlo en uno.

Código MySQL:
Ver original
  1. IF ((SELECT COUNT(*) FROM Personas AS alias1) > 0 AND SUBSTRING((SELECT CodigoUnico FROM Personas AS alias2 ORDER BY CodigoUnico DESC LIMIT 1), 8, 12) = YEAR(CURDATE()),
  2.     CONCAT(
  3.         YEAR(CURDATE()),
  4.         '-',
  5.         CONVERT(
  6.             SUBSTRING((SELECT CodigoUnico FROM Personas AS alias3 ORDER BY CodigoUnico DESC LIMIT 1), 14),
  7.             UNSIGNED INTEGER
  8.         ) + 1
  9.     ),
  10.     CONCAT(YEAR(CURDATE()), '-', 1)
  11. )

El año aparece en la posición 8 y culmina en la 12, mientras que el número correlativo aparece en la posición 14. Esos son los números que tenías que poner como nuevos argumentos de la función.

Siempre debes analizar el código antes de probarlo, pues, por limitarse a copiar y pegar sin antes verificar que la lógica del algoritmo se adecúa a lo que necesitamos, surgen inconvenientes, como este.

Un saludo
__________________
«Laissez faire et laissez passer, le monde va de lui même»

Etiquetas: mysql-php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:04.