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

[SOLUCIONADO] Autoincrement de 5

Estas en el tema de Autoincrement de 5 en el foro de Mysql en Foros del Web. Bueno lo que intento hacer que en vez de autoincrementarse en mi base de datos de 1,2,3,4,5...., se incrementara de está manera: 00001, 00002, 00003, ...
  #1 (permalink)  
Antiguo 19/08/2014, 10:06
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Autoincrement de 5

Bueno lo que intento hacer que en vez de autoincrementarse en mi base de datos de 1,2,3,4,5...., se incrementara de está manera:

00001, 00002, 00003, 00004, 00005,.....etc... Hasta llegar el limite de 99999.

¿Es posible?

Saludos.
  #2 (permalink)  
Antiguo 19/08/2014, 11:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Autoincrement de 5

Los números por definicion carecen de ceros a la izquierda. Al menos si recuerdas lo enseñado en la escuela primaria...

Más allá de eso, en BBDD los números no se almacenan como cifras, sino compo binario, por lo que tampoco existen los ceros a la izquierda. Eso se obtiene por representación, es decir, puedes crear la cadena con el dato formateado, por ejemplo, usando LPAD()
Código MySQL:
Ver original
  1. SELECT LPAD(campo_id, '0', 5) id
  2. FROM...
Ahora bien, lo del límite de números es otro cantar..
Como el límite está dado por el rango de representación del tipo de columna, no hay un modo desde la estructura de la tabla de restringirlo. Una posibilidad de forzarlo sería usar DECIMAL(5), por ejemplo, como tipo de columna, pero no creo que puedas declarar una columna DECIMAL como AUTO_INCREMENT, aunque nunca lo he probado...

Intentalo así y vemos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 19/08/2014, 11:45
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Autoincrement de 5

Gracias gnzsoloyo, sobre lo de DECIMAL lo e probado y no es posible, sobre lo de 0 a la izquierda lo sé por eso acudo aquí para haber si hay alguna solución. Y bueno voy a probar el metodo que indicas y digo cosas.

Saludos.
  #4 (permalink)  
Antiguo 19/08/2014, 12:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Autoincrement de 5

Pues en ese caso lo que te conviene es usar LPAD() al realizar las consultas, y dejar el AI en una columna INT UNSIGNED.
Ten muy en cuenta que lenguajes como PHP, por ejemplo, pueden eliminarte esos ceros a la izquierda, llegado el caso, por lo que deberás ver bien el tema en el foro del lenguaje correspndiente.

Respecto a la restricción de rango mi sugerencia es que realices una validación previa antes de las inserciones a fin de no excederte. Yo, personalmente, implementaría toda inserción en SP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 19/08/2014, 15:47
Avatar de toledo_nocturno  
Fecha de Ingreso: agosto-2011
Ubicación: Under the northen star
Mensajes: 86
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: Autoincrement de 5

Al hilo de lo que comentaba gnzsoloyo sobre manipular en php, u otro lenguaje... ¿Tienes que manipular estos datos justamente así en la base de datos?

Si lo único que necesitas es mostrarlo así, y no haces cálculos muy exhaustivos, podrías tener un campo id autoincrement normal, limitado a 5, y un id varchar 5 con un disparador al before insert/update que cogiese el valor del propio id, calculase la cantidad de "ceros" que te faltan, y te los añadiese. Y entonces si que lo podrías manipular, los cálculos que tuvieses que hacer los harías con el id, y luego lo pintarías del mismo modo.

Se que no es una solución muy buena ni eficaz, pero no se me ocurre nada mejor, salvo escalar esta parte a nivel de aplicación.

Espero que sea de ayuda.
__________________
diseño web | Clan Rol
  #6 (permalink)  
Antiguo 20/08/2014, 01:27
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Autoincrement de 5

Al final lo que e echo es generar automaticamente numeros aleatorios del 1 al 9 con min y max 5 números, para asi que no genere ceros. Supongo que no será un metodo correcto pero hasta que se me ocurra otra cosa... Por que lo que quiero hacer es una identificacion del usuario con esos digitos y al insertar en DB si ya esiste ese numero no isertarlo, se generaría uno nuevo y si no existe se insertaría.

Saludos.
  #7 (permalink)  
Antiguo 20/08/2014, 06:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Autoincrement de 5

Un par de observaciones:
1.- No hay una relación entre usar un auto_increment y usar números aleatorios. Frqancamente me parece que etás complicando innecesariamente el tema.
2.- El uso de números aleatorios de rango restringido tarde o temprano bloquea el proceso y saldrá por timeout, por un pequeño problema matemático: A medida que se vayan agregando entradas a la tabla, los números disponibles se reducen. Pero como la generación de numeros aleatorios es precisamente aleatoria, al reducirse mucho los espacios de numeros disponibles la mayoría de los generados caerá en valores ya usados, yllegará el punto donde el tiempo para hallar un número útil tenderá al infinito, superando el timeout del sistema.

Este segundo problema sólo se manifiesta luego de una cierta cantidad de inserciones en la tabla, pero se presentará si so si. Es igual a la derivada de una función logarítmica inversa: Tiende al infinito.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 20/08/2014, 09:00
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Autoincrement de 5

Si gnzsoloyo tiene su logica, sobre el auto-increment y aleatorio, antes quería hacerlo que autoincrementara, pero decidi hacerlo aleatorio y claro exponiendo tu observación tienes toda la razón por lo que me pondré a buscar algun otro metodo por que la idea es que tenga cada registro su número de referencia.

Para esto, ¿que me aconsejarias?

Saludos.
  #9 (permalink)  
Antiguo 20/08/2014, 09:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Autoincrement de 5

No te compliques...

Sigue con el incremental, y simplemente verifica que nunca superes los 99999 registros en esa tabla antes de insertar uno nuevo...
El resto es sencillament ele uso de LPAD para generar la visualización del ID con ese mismo AI.

Yo, como creo ya te dije, lo implementaría directamente todo en un SP para que se le envien los datos y toda verificacion previa esté encapsulada con el alta, si se cumple que el limite de registros no se supera, o te devuelva error si ya se agotaron los valores.
De hecho, eso te facilitaría usar una tabla paramétrica, por ejemplo, para reconfigurar el limite de numeración sin necesidad de andar tocando código. Sería un simple UPDATE a una tabla de parámetros...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: Ninguno
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 06:02.