Foros del Web » Programando para Internet » PHP »

ayuda con mysql

Estas en el tema de ayuda con mysql en el foro de PHP en Foros del Web. hola tengo un problemita y es que tengo una base de datos y funciona de maravilla con sus tablas, el problemita es que cuando borro ...
  #1 (permalink)  
Antiguo 20/08/2008, 01:25
 
Fecha de Ingreso: enero-2008
Mensajes: 62
Antigüedad: 16 años, 3 meses
Puntos: 0
ayuda con mysql

hola tengo un problemita y es que tengo una base de datos y funciona de maravilla con sus tablas, el problemita es que cuando borro un dato de una tabla, el campo id se queda salteado, osea que si los dato tienen el id 1, 2, 3, 4... si borro el dato 2 en la base de datos se quedad 1, 3, 4... como hago para reorganizar los numeros que queden en orden????


si alguien sabe se los agradecere...

saludos
  #2 (permalink)  
Antiguo 20/08/2008, 02:52
Avatar de Kamae  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona (Catalunya)
Mensajes: 307
Antigüedad: 16 años
Puntos: 13
Respuesta: ayuda con mysql

Buenas

Así con alguna función y tal, desconozco si existe, a mí nunca me la explicaron en el FP, es posible que exista algo así pero... He buscado en google y no he encontrado nada... Así que no creo.

Lo que yo haría es:

Si vas a borrar un campo, primero recoges su índice (por ejemplo el 4). Lo borras. Luego buscas el que tenga mayor id, lo modificas y le pones el 4, y luego le dices al auto_increment que empiece desde el mayor id menos 1 (para que no se deje ese vacío también). Todo esto suponiendo que tu campo ID es un Auto_increment...

Es decir, que cada vez que borres algo, debes hacer algo así como:

Código PHP:
// Quieres borrar el registro de un tío que se llama Pau
$result=mysql_query("SELECT id FROM nombres WHERE nombre='Pau'");
$id_borrado=mysql_fetch_row($result);
$id_borrado=$id_borrado[0]; // Pura manía, para no tener que ir a la posición del array luego
// Ahora que tenemos el id, ya lo puedes borrar
mysql_query("DELETE FROM nombres WHERE nombre='Pau'");
// Y ahora arreglamos los índices
$result=mysql_query("SELECT max(id) FROM nombres"); 
// Supongamos que devuelve el índice 23
$id_max=mysql_fetch_row($result);
$id_max=$id_max[0]; // La manía de antes.. :D
// Ya tenemos el índice máximo, podemos editarlo
mysql_query("UPDATE nombres SET id=".$id_borrado." WHERE id=".$id_max."");
// Esto convierte al id=23 en id=4
$id_nuevo=$id_max-1// $id_nuevo será 22, así el siguiente registro será otra vez 23
mysql_query("ALTER TABLE nombres AUTO_INCREMENT=".$id_nuevo.""); 
Ya está. Lo he probado, no con código pero sí con sentencias MySQL y funciona todo. Debería de irte, sino es así dilo porque será alguna chorradita en el código PHP que habré puesto mal :P

Bueno, y si te funciona dilo también, así lo sé yo por si lo necesito algún día :D

Saludos!

PD: Si te interesaría que tus ids fueran correlativos, es decir, que están ordenados por fecha y por lo tanto el último no puedes colocarlo entremedio porque te lo descoloca todo, entonces deberías hacer otro algoritmo, que si no se te ocurre postea y dilo, porque también sería fácil hacerlo
  #3 (permalink)  
Antiguo 20/08/2008, 06:24
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: ayuda con mysql

No deberias hacerlo >.<


Si tienes FK (Foreign key's) o tablas relacionadas, puede ser una escabechina. Un id, de forma tradicional, sólo es un número para identificar, no para mostrar, asiq no sé pq quieres cambiarlo.

Recuerdo del FP (oh!) que comentó algo la profe de BBDD asó como que habia una opción para que MySql fuera colocando los id's, es decir, si tienes 1,2,3,4 y borras el 3, el siguiente registro que ingresas sería el 3.

Lo malo era que perdias el 'orden' de creacion ^^. Esto último es un recuerdo de unas clases soporíferas, asiq no sé si es cierto
  #4 (permalink)  
Antiguo 20/08/2008, 07:49
Avatar de Kamae  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona (Catalunya)
Mensajes: 307
Antigüedad: 16 años
Puntos: 13
Respuesta: ayuda con mysql

Esas clases de FP en que todo el mundo está navegando por foros, jugando al Counter Strike en red, o a juegos cutres como el de Trial de motos, el Kid Chamaleon... jajajaj

Tienes razón en lo de las FK, aunque tendría el mismo arreglo. No hay ningún peligro siempre y cuando se modifique también en las tablas relacionadas. Pero pensándolo bien, yo tampoco sé que se gana reordenando IDs.
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:56.