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

renumerar registros en base de datos

Estas en el tema de renumerar registros en base de datos en el foro de Mysql en Foros del Web. Hola a todos, Alguien sabe como puedo hacer para despues de eliminar registros de una base de datos desde un documento php, renumerar un campo ...
  #1 (permalink)  
Antiguo 26/03/2007, 07:37
 
Fecha de Ingreso: marzo-2007
Mensajes: 1
Antigüedad: 17 años
Puntos: 0
renumerar registros en base de datos

Hola a todos,

Alguien sabe como puedo hacer para despues de eliminar registros de una base de datos desde un documento php, renumerar un campo que he llamado id, este campo es de tipo PRYMARY y auto_increment, y es el que sirve para ordenar las peticiones de registros a la BD, al eliminar un registro queda un una fila vacia con el id que tenia el registro, y me gustaria evitar esto.
Me explico??
gracias por vuestra ayuda...
  #2 (permalink)  
Antiguo 26/03/2007, 08:09
 
Fecha de Ingreso: enero-2004
Mensajes: 63
Antigüedad: 20 años, 3 meses
Puntos: 0
Re: renumerar registros en base de datos

Con un update lo resuelves. Sería algo así:

UPDATE tabla SET id = id-1 WHERE id < {id que has eliminado}

Pero el autoincrement no se te actualizará por lo que te volverá a hacer un hueco. Puedes optar por no usar el autoincrement haciendo antes de cada inserción una consulta que te de el valor máximo (así insertas el registro con el valor id mayor que el valor máximo que ya tenías).

Pero depende de para qué lo uses no sé si es recomendable hacer esto. Creo que es mejor crear el autoincrement en un campo con un tipo de datos lo suficientemente grande (smallint, int, bigint...) y dejar que el sistema trabaje sin repetir nunca IDs aunque al borrar deje "huecos".

Un saludo
  #3 (permalink)  
Antiguo 26/03/2007, 08:10
Avatar de Angel K ido  
Fecha de Ingreso: febrero-2007
Mensajes: 48
Antigüedad: 17 años, 2 meses
Puntos: 0
Mensaje Re: renumerar registros en base de datos

No se si se pueda (No creo), pero de todas formas, ¿Cual sería el motivo para hacerlo?, no le veo ningún sentido ya que esa acción podría traerte algunos problemas, por ejemplo, si tuvieses otra tabla con una clave foranea a esta tabla, ¿cambiarías esas claves también y todas aquellas que hagan referencia a esta segunda tabla?.-

Espero se entienda lo que quiero decir.-

Un saludo
  #4 (permalink)  
Antiguo 26/03/2007, 08:14
Avatar de Angel K ido  
Fecha de Ingreso: febrero-2007
Mensajes: 48
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: renumerar registros en base de datos

Cita:
Iniciado por javi_bus Ver Mensaje
Con un update lo resuelves. Sería algo así:

UPDATE tabla SET id = id-1 WHERE id < {id que has eliminado}
Creo que sería > (Mayor)

Cita:
Pero el autoincrement no se te actualizará por lo que te volverá a hacer un hueco. Puedes optar por no usar el autoincrement haciendo antes de cada inserción una consulta que te de el valor máximo (así insertas el registro con el valor id mayor que el valor máximo que ya tenías).

Pero depende de para qué lo uses no sé si es recomendable hacer esto. Creo que es mejor crear el autoincrement en un campo con un tipo de datos lo suficientemente grande (smallint, int, bigint...) y dejar que el sistema trabaje sin repetir nunca IDs aunque al borrar deje "huecos".
Estás en lo cierto

Un saludo
  #5 (permalink)  
Antiguo 27/03/2007, 13:24
 
Fecha de Ingreso: enero-2004
Mensajes: 63
Antigüedad: 20 años, 3 meses
Puntos: 0
Re: renumerar registros en base de datos

Fue un despiste jeje. Gracias por el aviso Angel K. Pero efectivamente yo no veo ningún motivo para reorganizar las claves cada vez que se elimine una. Es mejor mantener la idea de asociar un ID único a cada elemento el cual nunca se repita. El ID solo es una herramienta de la BD para distinguir entidades diferentes. Y si estimamos que un campo se puede quedar pequeño con el tiempo (que se pueda alcanzar el valor máximo un día) siempre podemos echar mano del bigint que permite 19 cifras.

Un saludo
  #6 (permalink)  
Antiguo 13/04/2007, 01:55
 
Fecha de Ingreso: abril-2007
Mensajes: 1
Antigüedad: 17 años
Puntos: 0
Re: renumerar registros en base de datos

Buenos dias, y perdon por meterme asi de golpe... Yo si tengo un motivo para renumerar (o al menos eso creo necesitar) y es que necesito tener una tabla ordenada por "fecha" y poder hacer cuentas con el registro anterior... Como no se decirle cual es este, habia pensado en hacer la chapuza de llevar un indice ordenado, al cual si podria decirle "orden-1" y recuperar el dato q necesito en ese momento....
No se si me explico... encima lo estoy haciendo en sql para access... con lo q el tema de variables y demas se pone mas feo....
Muchas gracias por llegar leyendo hasta aqui...
  #7 (permalink)  
Antiguo 13/04/2007, 11:09
 
Fecha de Ingreso: enero-2004
Mensajes: 63
Antigüedad: 20 años, 3 meses
Puntos: 0
Re: renumerar registros en base de datos

Hola bera,

¿Por qué no creas un campo para almacenar fechas? Ya sea un campo tipo fecha de mysql o un int(10) con un valor timestamp de php (el valor en segundos que te da con la función time) ambos pueden ordenarse. De modo que puedes ordenarlos o buscar el último, el primero, etc sin ningún problema. El primary key suele ser mejor dejarlo como identificador único, es decir, que sea autoincrementable y nunca se repitan dos IDs, no solo al mismo tiempo, si no que nunca (vamos, que si has borrado un registro, borraste el registro cuya ID era X pero ya nunca volverá a aparecer). Tiene todo más lógica así. La otra solución es no usar el autoincrement y hacerlo "manualmente" en la consultas SQL, es decir, que busque el "hueco" y luego insertar ahí. Pero eso consumiría muchos recursos a lo tonto. Por eso digo que mejor usar una PK con autoincrement.

Un saludo
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:09.