Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/08/2008, 02:52
Avatar de Kamae
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