Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Campo incremental

Estas en el tema de Campo incremental en el foro de Mysql en Foros del Web. Buenas a tod@s y gracias de antemano por vuestra ayuda. Estoy iniciándome en Sql con phpmyadmin y me veo en la necesidad de hacer un ...
  #1 (permalink)  
Antiguo 06/03/2013, 12:39
 
Fecha de Ingreso: septiembre-2008
Mensajes: 17
Antigüedad: 15 años, 7 meses
Puntos: 0
Campo incremental

Buenas a tod@s y gracias de antemano por vuestra ayuda.
Estoy iniciándome en Sql con phpmyadmin y me veo en la necesidad de hacer un campo incremental del tipo 2013-0000-P, en el que 2013 cambie a 2014 de forma automática cuando llege el momento, y el 0000, va incrementando conforme se creen registros, y la P, es sinplemente para diferenciar de "P" de "F". No se como acometerlo.
Gracias por todo

Última edición por Alfilblanco; 06/03/2013 a las 12:41 Razón: Complementar el mensaje
  #2 (permalink)  
Antiguo 06/03/2013, 16:08
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Campo incremental

Hola Alfilblanco:

Vamos por partes. No es posible tener un campo compuesto que se comporte tal como lo deseas, pero no sé si lo necesitas físicamente en la tabla o si en realidad lo único que deseas es visualizarlo de esa forma.

Hace tiempo tuve una situación similar, pero te repito, en realidad lo único que se necesitaba era presentar de manera visual el campo con este formato, no era necesario que existiera el campo físicamente en la bd... Lo que se hizo fue tener tres campos, un campo tipo fecha (donde se almacenaba la fecha de creación del registro), un campo incremental, definido como smallint, de longitud 4 y marcado como cero fill y un campo varchar donde almacenábamos un caracter de control... para mostrar simplemente concatenabamos los valores, algo así:

Código:
CREATE TABLE `pruebas`.`clave_compuesta`(
`fecha` DATE NOT NULL , 
`incremental` SMALLINT(4) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT UNIQUE , 
`tipo` VARCHAR(1) NOT NULL , 
PRIMARY KEY (`fecha`, `incremental`, `tipo`) );
Código MySQL:
Ver original
  1. mysql>   SELECT * FROM clave_compuesta;
  2. +------------+-------------+------+
  3. | fecha      | incremental | tipo |
  4. +------------+-------------+------+
  5. | 2013-03-06 |        0001 | A    |
  6. | 2013-03-06 |        0002 | C    |
  7. | 2013-03-06 |        0003 | A    |
  8. | 2013-03-06 |        0004 | C    |
  9. +------------+-------------+------+
  10. 4 rows in set (0.02 sec)
  11.  
  12. mysql> SELECT
  13.     ->   fecha, incremental, tipo,
  14.     ->   CONCAT(YEAR(fecha),'-', incremental, '-', tipo) clave
  15.     -> FROM clave_compuesta;
  16. +------------+-------------+------+-------------+
  17. | fecha      | incremental | tipo | clave       |
  18. +------------+-------------+------+-------------+
  19. | 2013-03-06 |        0001 | A    | 2013-0001-A |
  20. | 2013-03-06 |        0002 | C    | 2013-0002-C |
  21. | 2013-03-06 |        0003 | A    | 2013-0003-A |
  22. | 2013-03-06 |        0004 | C    | 2013-0004-C |
  23. +------------+-------------+------+-------------+
  24. 4 rows in set (0.00 sec)

En cuanto a lo de resetear a 0000, lo tienes que hacer con un ALTER TABLE

Código:
ALTER TABLE clave_compuesta AUTO_INCREMENT = 1;
Programando un job para que se ejecute en el primer segundo del 01 de enero de cada año.

Otra opción es que mediante procedimientos controles mediante procedimientos almacenados el insert hacia esta tabla, pero esa es otra historia.

Saludos
Leo.
  #3 (permalink)  
Antiguo 08/03/2013, 09:43
 
Fecha de Ingreso: septiembre-2008
Mensajes: 17
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Campo incremental

Muchísimas gracias por tu respuesta, me ha servido mucho.
En realidad, lo que necesito es que cada vez que se abra un formulario, me cree la referencia que puse anteriormente 2013-000X-P que aparecería en un campo jtxtfield, pero que no llege a guardarse en la base de datos, hasta que el usuario lo acepte y dé de alta el registro, es decir, que si no acepta el formulario (demás datos existentes en él), no se registra dicha referencia, y cuando vuelva a abrir el formulario, la referencia anterior sigue (la que toque en ese momento por la referencia 000X), ya que no se dió de alta.
Gracias por todo, espero haber sido mas explícito.

Última edición por Alfilblanco; 08/03/2013 a las 09:46 Razón: fallo en texto

Etiquetas: phpmyadmin
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 23:53.