Foros del Web » Programando para Internet » PHP »

Resetear el el campo id con la secuencia 1,2,3.. cuando borro el registro 2.

Estas en el tema de Resetear el el campo id con la secuencia 1,2,3.. cuando borro el registro 2. en el foro de PHP en Foros del Web. Que onda carajos.. les dejo una duda para que se diviertan y de paso me ayuden. Tengo una tabla con el campo id , por ...
  #1 (permalink)  
Antiguo 14/08/2007, 15:24
Avatar de eskorbutin  
Fecha de Ingreso: junio-2006
Mensajes: 65
Antigüedad: 17 años, 10 meses
Puntos: 2
Resetear el el campo id con la secuencia 1,2,3.. cuando borro el registro 2.

Que onda carajos.. les dejo una duda para que se diviertan y de paso me ayuden.

Tengo una tabla con el campo id, por ejemplo, tengo 5 registros entonces, el valor de id sería 1, 2, 3, 4 y 5, si borro el registro 3, quedaría 1, 2, 4 y 5. Cuál sería la opción más rapida y/o conveniente para resetear esos valores a 1, 2, 3 y 4. Hay varias opciones claro...

  #2 (permalink)  
Antiguo 14/08/2007, 15:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Resetear el el campo id con la secuencia 1,2,3.. cuando borro el registro 2.

No es lo mas conveniente resetear las claves primarias, debes de entender que esos saltos es parte del comportamiento de un campo autoincrement y mejor si quieres identificar un dato y que el valor sea continuo agrega un campo extra que se llame orden.

Saludos.
  #3 (permalink)  
Antiguo 14/08/2007, 16:45
Avatar de eskorbutin  
Fecha de Ingreso: junio-2006
Mensajes: 65
Antigüedad: 17 años, 10 meses
Puntos: 2
Re: Resetear el el campo id con la secuencia 1,2,3.. cuando borro el registro 2.

ok, pero sigo con la misma pregunta. Lo que pasa es que necesito llevar un orden..
cuál sería el procedimiento más conveniente para ordenar los campos, lo que pasa es que yo lo hago de una manera pero resulta que casi siempre hay alguna función o procedimiento más rapido.

este es un ejemplo que hice:

http://72.232.249.66/~fcovillae/prueba.php

y el código del botón Eliminar es:

Código PHP:
if (isset($_POST['Eliminar'])){
    
$idDeleted $_POST['id'];
    
mysql_query("DELETE FROM orden WHERE orden = $idDeleted");
    
$result mysql_query("SELECT * FROM orden");
    
$numRows mysql_num_rows($result);
    
mysql_free_result($result);
    for (
$i=$idDeleted+1;$i<=$numRows+1;$i++){
        
mysql_query("UPDATE orden SET orden = $idDeleted WHERE orden = $i");        
        
$idDeleted++;
    }

  #4 (permalink)  
Antiguo 14/08/2007, 16:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Resetear el el campo id con la secuencia 1,2,3.. cuando borro el registro 2.

Pues creo tu algoritmo es el mas indicado aunque eso lo que haria tmb seria reordenar los campos no continuos asi que debes en tu query hacer:

Código:
SELECT * FROM orden ORDER BY orden ASC
Para que los registros se ordenen de manera secuencial, posteriormente tendrias que seleccionar la orden 1 y de ahi empezar a contar, si se salta de ahi haces el "decremento" en las demas.

Puede ser algo asi:
Código PHP:
$result mysql_query("SELECT orden FROM orden ORDER BY orden ASC");
$ids = array();
while( 
$row mysql_fetch_row$result ) ) {
       
$ids[] = $row[0];
}
$start $ids[0];
foreach( 
$ids as $id ) {
     
$cmp $id;
     if( 
$cmp != $start ) {
           
mysql_query"UPDATE orden SET orden=orden-1 WHERE orden>$cmp" );
           
$start $cmp;
     }

Puedes empezar con algo como eso, aunque creo se romperia un poco la atomicidad de los datos..

Saludos.
  #5 (permalink)  
Antiguo 14/08/2007, 17:59
Avatar de eskorbutin  
Fecha de Ingreso: junio-2006
Mensajes: 65
Antigüedad: 17 años, 10 meses
Puntos: 2
Re: Resetear el el campo id con la secuencia 1,2,3.. cuando borro el registro 2.

Grancias GatorV. Unas dudas..
Como que rompería con la automicidad de los datos?

Creo que,

Código:
SELECT * FROM orden ORDER BY orden ASC
lo tengo que usar en el caso de que tenga más de 10 registros por que puede ser que me debuelva 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20.... en caso de no usar ORDER BY orden ASC. Creo que en general no entendi muy bien lo que escribiste.. será que ya debo descansar un poco ?

por ejemplo esto:
Cita:
Para que los registros se ordenen de manera secuencial, posteriormente tendrias que seleccionar la orden 1 y de ahi empezar a contar, si se salta de ahi haces el "decremento" en las demas.
y despues esta línea

Código PHP:
mysql_query"UPDATE orden SET orden=orden-1 WHERE orden>$cmp" ); 
en donde esta SET orden=orden-1
  #6 (permalink)  
Antiguo 14/08/2007, 21:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Resetear el el campo id con la secuencia 1,2,3.. cuando borro el registro 2.

Cita:
Iniciado por eskorbutin Ver Mensaje
Grancias GatorV. Unas dudas..
Como que rompería con la automicidad de los datos?
La idea en un disenio de bases de datos es que cada registro sea identificado por una llave primaria para que las busquedas sean mas optimas, al tu cambiar de valor la llave primaria mueves mucha informacion que afecta los index de tus tablas.

Cita:
Iniciado por eskorbutin Ver Mensaje
Creo que,

Código:
SELECT * FROM orden ORDER BY orden ASC
lo tengo que usar en el caso de que tenga más de 10 registros por que puede ser que me debuelva 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20.... en caso de no usar ORDER BY orden ASC. Creo que en general no entendi muy bien lo que escribiste.. será que ya debo descansar un poco ?
Que tipo de campo es orden? numerico o texto?

Cita:
Iniciado por eskorbutin Ver Mensaje

por ejemplo esto:


y despues esta línea

Código PHP:
mysql_query"UPDATE orden SET orden=orden-1 WHERE orden>$cmp" ); 
en donde esta SET orden=orden-1
Lo que hace es si encuentra un "salto" en la secuencia entonces le dice a orden que se le reste un valor para ir acomodando los indices.

Saludos.
  #7 (permalink)  
Antiguo 14/08/2007, 21:46
Avatar de eskorbutin  
Fecha de Ingreso: junio-2006
Mensajes: 65
Antigüedad: 17 años, 10 meses
Puntos: 2
Re: Resetear el el campo id con la secuencia 1,2,3.. cuando borro el registro 2.

A ya veo.. es cierto, si cambio los indices tendría que modificar cada tabla con las que esté relacionada, lo que sería muy tedioso, o como decías, rompería un poco con la automicidad de los datos. Aun que hay ocaciones en las que tenemos que hacerlo y no hay otra opción. Tendré que pensarlo bien.

Thank's GatorV, definitivamente tenia que dormir un poco, jaja
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 09:46.