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

problemas con update

Estas en el tema de problemas con update en el foro de Mysql en Foros del Web. Buenas!!! me estoy volviendo loca...y estoy segura que es porque se me escapa alguna tontería. tengo una tabla en una base de datos, con un ...
  #1 (permalink)  
Antiguo 28/12/2009, 10:51
 
Fecha de Ingreso: diciembre-2009
Mensajes: 10
Antigüedad: 14 años, 3 meses
Puntos: 0
problemas con update

Buenas!!!

me estoy volviendo loca...y estoy segura que es porque se me escapa alguna tontería.

tengo una tabla en una base de datos, con un campo llamado orden (int). cuando se insertan nuevas filas, el campo orden se rellena automáticamente con el número inmediatamente posterior.
bien, pues quiero que cuando se borre alguna de las filas....se renumere el campo orden, de manera que no quede ningún salto de números.
Para ello, hago el DELETE....que si me va bien... y luego el UPDATE, que es lo que me falla...


ahí va el código, con php:

$consulta3="DELETE from descripcion_act WHERE id_actividad=".$idactividad." and id_personas=". $idpersonas;
$datos3=mysql_query($consulta3);

$consulta4="SELECT * FROM descripcion_act ORDER BY orden ASC";
$datos4=mysql_query($cosulta4);

$cont=1;//esta variable servirá para grabar el orden
while ($fila4=mysql_fetch_array($datos4))
{
//voy de fila en fila actualizando el campo orden

$consulta5="UPDATE descripcion_act SET ORDEN=".$cont2;
$datos5=mysql_query($consulta5);
}


he comprobado que la cadena de la consulta 5 se genera bien...xo no sé por qué me da error al hacer la consulta con mysql_query($consulta5);

alguien me puede echar una mano???
muchas gracias
  #2 (permalink)  
Antiguo 28/12/2009, 10:52
 
Fecha de Ingreso: diciembre-2009
Mensajes: 10
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: problemas con update

ah!!! se me ha olvidado añadir que antes de finalizar el while, aumento el contador ($cont++;)
  #3 (permalink)  
Antiguo 28/12/2009, 11:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problemas con update

Veamos...
De tanto en tanto surge nuevamente este tema y en general lo que quieren hacer es siempre lo mismo: renumerar. Hace un tiempo tres foristas preguntaron este asunto y te paso a comentar lo que les dije a ellos:

1. No es conveniente "reorganizar" un índice autoincremental porque en esencia es una tarea sin funcionalidad, carente de practicidad y consumidora innecesaria de tiempo de proceso.

2. El renumerar las PRIMARY KEY de un campo incremental no produce ninguna mejora en la optimización de consultas, por lo que hacerlo solamente resulta en tiempo de PC consumido.

3. Renumerar un campo autoincremental, genera un nuevo ordenamiento FISICO de los datos (una PK genera un índice cluster), con la consiguiente sobrecarga del microprocesador, porque tiene que reescribir físicamente la tabla cada vez y reconstruir el índice completamente.

4. Tampoco es recomendable bajo ninguna circunstancia renumerar una PK (es el caso en MySQL donde un AUTOINCREMENT es PK por default) si se usa como FK de otras tablas, porque generará inconsistencia de datos entre registros de tablas relacionadas.

5. No se recomienda renumerar si existen datos históricos de otras transacciones, que hacen referencia a otros registros que tenían el mismo número. De hecho, en una tabla de stock, las ID jamás cambian porque el hecho que un producto ya no exista ni se fabrique no quiere decir que no aparezca en registros más antiguos. Pisar un ID sería lo mismo que ponerle a un recién nacido el número de documento de un muerto.

6. Por otro lado, ¿qué te importa que tengas espacios de números que ya no usas, en tanto la numeración sea secuencial e incremental? ¿para qué perder tiempo en renumerar?, ¿para que quede más lindo? . Eso lo puedes hacer perfectamente en la interfase, donde visualizas la tabla de datos, o bien usando variables de usuario en la consulta (ver FAQs)

7. SI tu temor es quedarte sin números para usar, un ID generado en un campo numérico UNSIGNED tiene estos rangos:

- TINYINT: 0 a 255.
- SMALLINT: 0 a 65.535.
- MEDIUMINT: a 16.777.215
- INT: 0 a 4.294.967.295.
- BIGINT: 0 a 18.446.744.073.709.551.615

¿Esperas usar más IDs que eso?

Recuerda que las bases de datos no se deben manipular caprichosamente. Son el centro neurálgico de la información de las aplicaciones.
Finalmente, en tu caso el hecho de renumerar los registros no hará que el siguiente número a ingresar sea el siguiente al último que está en la base, porque ese valor no se calcula de esa forma, sino que está definido en la estructura de la tabla... Por lo que para que sea efectivo deberás redefinir la tabla misma, con todos los riesgos que ello implica.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 28/12/2009, 11:27
 
Fecha de Ingreso: diciembre-2009
Mensajes: 10
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: problemas con update

muchas gracias por contestar tan rapido
la verda es que tienes razón
pensé que necesitaba tener todos los campos orden con números correlativos...xo si lo pienso mejor, no!! :)

graciasssssssssss!!!!
  #5 (permalink)  
Antiguo 28/12/2009, 11:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problemas con update

Para numeraciones consecutivas que no dependan del ID, te recomiendo que leas el link que te puse. Es muy eficiente cuando lo aprendes a dominar.
Saludos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 12:57.