MySQL - Renumeracion

   
Vista:

Renumeracion

Publicado por NAT (3 intervenciones) el 14/06/2008 00:13:53
Hola!!
Por casualidad, alguien ha hecho algún procedimiento de renumeracion de registros....tengo una tabla donde es muy importante el campo orden....el tema es que cuando hace una inserción necesito que ese campo se re numere para evitar colisión!!......pensé 2 opciones....
un seria renumerar este campo por ej de 10 en 10 para q en el momento de la inserción no ocurra la colisión y q se haga una o 2 veces al día la renumeracion mediante un procedimiento almacenado (que no se como se hace!!!)
y la otra que re numere en el momento de la inserción......cual de las 2 opciones seria la mas fiable y como hacer el procedimiento almacenado???

Gracias por leer mi laaaaaaaaaaarga explicacion, espero respuestas!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Renumeracion

Publicado por Gonzalo GC (339 intervenciones) el 14/06/2008 13:15:44
En realidad es muy raro que se produzca algún tipo de colisión por la numeración de los registros, salvo que la numeración dependa de algún objeto ajeno a la base de datos.
En ese caso el problema es la falta de integración entre ese objeto y la base misma.
Las colisiones por numeración no existen en las bases de datos porque existen los campos autonumeradores. Si el campo lo numeras manualmente, entonces el índice está mal definido, o simplemente no estás usando los índices correctamente.
Sería bueno que nos dieses detalles más finos de cómo funciona el sistema y por qué razones puede producirse una colisión. Sin eso es imposible decirte cuál es la solución más conveniente. La respuesta puede variar entre el diseño de los índices, la creación de triggers, store procedures o la manipulación directa de la estructura de la tabla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Renumeracion

Publicado por NAT (3 intervenciones) el 14/06/2008 15:46:45
Gonzalo...entiendo todo lo que me decis...quizas me falto aclarar que el campo Orden (que es el q hay q renumerar ) no es campo indice...
Los campos de la tabla son los ste (guia telefonica)
ID (indice autoincr)
Orden
Nombre
Direccion
Telefono
El tema es que los datos son escaneados desde una guia...y muchas veces el escanero trae errores (falta de registro o registros ilegibles) entonces para la correccion se hace necesario tener el numero de orden que es el numero del registro dentro de la guia...(no puedo ordenar alfabeticamente pues tengo muchos error en el primer caracter y subsiguientes ). Al momento de hacer una insercion es donde me encuntro con el gran problema de la colision no el campo indice sino en el campo Orden...
Gracias de nuevo, espero haber sido clara!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Renumeracion

Publicado por Emerson Palacios (29 intervenciones) el 15/06/2008 17:05:01
Estoy tratando de entender tu explicacion. lo que mas o menos entiendo es lo siguiente, tienes una tabla guia telefonica(me parece mas que deberia llamarse usuarios,clientes etc) en la cual tienes un ID que es autoincrement. y te sirve como llave para diferenciar un registro de otro. despues los datos al ser escaneados contienen muchos errores entonces constantemente se tienen que correguir , para eso necesitas el campo orden para saber de que parte de la guia han sido escaneados los datos y hacer su respectiva correccion. ahora una pregunta ¿el campo orden lo ingresa algun usuario??. ¿tambien es escaneada??. si lo ingresa algun usuario o el programa que estas diseñando vamos bien, si es escaneada estas mal pues tambien esta propensa de errores de escaneo. que te indica exactamente el campo orden? numero de pagina, numero de posicion en la guia, ¿ a que te refieres exactamente con colision??? duplicidad de registros?? . respodeme esas interrogantes y haber si puedo ayudarte. nos vemos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Renumeracion

Publicado por NAT (3 intervenciones) el 17/06/2008 02:55:46
Paso a explicarte....el campo Orden no es escaneado...sino que asignado en el momento del escaneo. si? lo que indica es el orden de ese registro dentro de la guía....osea...por ej
suponiendo estos apellidos
Alarcon....orden 1
Alvarez.....orden 2
Benitez.....orden 3.....el numero de orden es lo que da el lugar en la guia. Es impresindible pues los datos escaneados son cotejados con la guía (de papel) y es la uncia manera que al mostrar la grilla se mantenga el orden de la guia de papel....el problema es que si me encuentro en la guia de papel con un apellido que no esta....siguiendo el ejemplo supongamos Baez....tendré que correr el campo orden....y Baez llevara el numero de orden 3...Benitez el 4....y asi sucesivamente.
Te agradezco mucho tu atencion. y espero haber sido clara.
Si con esta explicacion no es suficiente puedo subir el sistema (que esta en entonrno web ) a un sitio que puedas acceder
Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Renumeracion

Publicado por Emerson Palacios Meza (29 intervenciones) el 19/06/2008 16:33:44
Ya lo solucionaste ??. estuve con un maldito virus que no me dejaba entrar a esta y otras paginas felizmente lo solucione y tenia la manera ayudarte pero no podia postearla. bueno lo que quieres hacer se puede resumir en 2 procesos el primero seria. ubicar la posicion del apellido segun el orden alfabetico y el segundo insertarlo en la ubicacion evitando la colision . lo primero que debes hacer es insertar el registro de lo mas normal con el numero de orden que le sigue al correlativo. despues envias el apellido como parametro de entrada de un procedure en el procedure tienes que cargar un cursor de esto no estoy muy seguro creo que el select con que llenas no acepta variables pero la manera de consegurir el numero de orden que le toca a tu nuevo registro seria con un select de esta forma antes debes de declarar una variable.
mysql> set @a:=0;
mysql> select (@a:=@a+1),nombre from usuarios;
la primera sentencia inicia una variable en 0, la segunda hace que se te ordenen todos lo apellidos alfabeticamente y te da un numero que seria el numero que le corresponde en el ordenamiento este lo obtinenes comparanado paseandote por el cursor y comparando en cada fila el valor nombre donde lo encuentress guardas el numero orden en una variable. hasta ahi estaria la primera parte.
en la segunda lo que tienes que hacer es volver a carga un cursor con todos los registros de tu base pero solo cargas el campo orden y tu campo id tienes que estar ordenados por el campo orden. avanzas registro por registro hasta encontrar que el campo orden sea igual o mayor que tu variable que guardaste anteriormente cuando lo encuentra debes hacer un update a ese registro utilizando en el where el campo id, sumandole una unidad a su campo orden asi sucesivamente hasta el final de los registros de esta manera ya tendrias el hueco para meter ahi tu nuevo registro que coincidentemente estara al final de tu cursor entonces a ese campo ya le asignas el valor de la variable. eso seria todo ojala te sirva el manejo de procedures y cursores es sencillo. da una leidita antes si necesitas mas ayuda no dudes en preguntar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar