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

Crear indice autonumerico en una tabla con datos

Estas en el tema de Crear indice autonumerico en una tabla con datos en el foro de Mysql en Foros del Web. Hola, tengo una tabla con registros desordenados, quiero ordenarlos y poder crear un indice autonumerico, y asignar a cada fila una vez ordenada un numero ...
  #1 (permalink)  
Antiguo 30/04/2010, 12:13
 
Fecha de Ingreso: febrero-2009
Mensajes: 77
Antigüedad: 15 años, 9 meses
Puntos: 0
Crear indice autonumerico en una tabla con datos

Hola, tengo una tabla con registros desordenados, quiero ordenarlos y poder crear un indice autonumerico, y asignar a cada fila una vez ordenada un numero empezando por el 1 y en orden ascendente, para poder recuperar el último elemento insertado de forma sencilla.

Los registros vienen en formato Año/Numero expediente, Ejemplo:

1900/101
1900/102
1900/103
.
.
.
2010/500
2010/501
2010/502

----------------

La primera parte ya está conseguida, devuelvo los registros ordenados por año y dentro de cada año por numero de expediente. El problema está que ahora nos e como asignarle un indice a cada elemento, empezando en 1.

Para la consulta he empleado la siguiente instrucción:
Código:
SELECT SUBSTRING_INDEX( t1.Numero_expediente, '/', 1 ) , CAST( SUBSTRING_INDEX( t2.Numero_expediente, '/', -1 ) AS UNSIGNED )
FROM tabladatosencargos t1
JOIN tabladatosencargos t2 ON t1.Numero_expediente = t2.Numero_expediente
ORDER by 0+CONCAT(SUBSTRING_INDEX( t1.Numero_expediente, '/', 1 ),SUBSTRING_INDEX( t2.Numero_expediente, '/', -1 ))
Agradezco cualquier ayuda.
Gracias, un saludo!
  #2 (permalink)  
Antiguo 03/05/2010, 02:31
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Crear indice autonumerico en una tabla con datos

Un indice autonuémrico como pides no es la mejor solución para hacer lo que dices. me explico:

Si tienes

ID AnioExp
1 2010/1

y viene alguien e inserta el registro 2010/3 obtendrà el indice 2 y si despues alguien inserta el registro 2010/2 tendrà el indice 3 con lo que tendras otra vez la tabla "desordenada". Con el autoinc tienes muy facil obtener el ultimo registro entrado pero no el ultimo expediente del año.

Un indice automunerico se usa para obtener un identificador único de los registros pero no asegura la ordenación de estos por otros criterios (este seria el caso que nos planteas).

Luego como solucionaria yo tu caso, puestos a rediseñar agregaria el campo autonumerico con el objetivo de tener una clave principal unica, luego crearia dos campos numéricos uno para el año y otro para el expediente luego crearia un indice unico compuesto por esos dos campos.

Todo esto lo haces en una tabla nueva con la misma estructura que la tabla original mas estos tres campos que te digo.

Luego con un INSERT INTO buelcas todos los registros de la tabla original a la nueva. El autoincremental no tines que ponerlo se llenara solo. Usa lo que has aprendido para ordenar para separar el contenido del campo anio/exp.... a los campos anio y expediente.


La nueva tabla sera muy facil de ordenar por esos dos campos...


Otra manera de solucionar es usar un numero fijo de digitos para el numero de expediente


2010/00001
2010/00002
....
2010/10000
2010/10001


Espero que te sirva...

Quim

Etiquetas: indice, tablas
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 22:22.