Foros del Web » Programando para Internet » PHP »

Serio problemota

Estas en el tema de Serio problemota en el foro de PHP en Foros del Web. Hola quetal tengo un serio problema y no he podido solucionarlo a pesar de que lo he intentado muchas veces aqui va. tengo por ejemplo ...
  #1 (permalink)  
Antiguo 17/12/2008, 19:08
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 8 meses
Puntos: 32
Pregunta Serio problemota

Hola quetal tengo un serio problema y no he podido solucionarlo a pesar de que lo he intentado muchas veces aqui va.

tengo por ejemplo una tabla cod_iden, nombre_cargo al cual le estoy registrando estos valores

el primer dato es cod_iden el segundo nombre_cargo

1---sistemas
2--contabilidad
3---programador

Bueno ese no es el problema el problema es cuando trato de algun registro
por ejemplo si borro 2-contabilidad me quedaria descuadrado el cod_iden quedaria 1,3

1---sistemas
3---programador

y necesito que me quede ordenado 1 y 2 y asi sucesivamente con muchos mas
datos
1---sistemas
2---programador

Si alguien me pudiera mostrar un codigo de como hacerlo o alguna idea porfavor ayudenme

Salu2:
  #2 (permalink)  
Antiguo 17/12/2008, 19:18
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Serio problemota

Te recomiendo le des una leida a este post: http://www.forosdelweb.com/2704365-post2.html

Saludos.
  #3 (permalink)  
Antiguo 17/12/2008, 19:29
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 8 meses
Puntos: 32
Respuesta: Serio problemota

Si muy interesante pero resulta que lo tengo que renumerar alguien me podria ayudar?
  #4 (permalink)  
Antiguo 17/12/2008, 19:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Serio problemota

Si aun lo deseas hacer vas a tener que descargar todos los datos de tu base en un arreglo, realizar un foreach y ver viendo donde se "salta", cuando encuentres el numero entonces rompes el ciclo, y todos los registros desde ese punto en adelante haces una consulta restandole 1, esto lo haces hasta que toda tu tabla quede organizada.

Como viste en el post es una tarea muy complicada, pero si le piensas un poco al algoritmo lo vas a poder sacar.

Saludos.
  #5 (permalink)  
Antiguo 17/12/2008, 19:35
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 8 meses
Puntos: 32
Respuesta: Serio problemota

Si en eso tienes razon voy ha tratar de hacerlo y te comento

Salu2
  #6 (permalink)  
Antiguo 17/12/2008, 19:49
Avatar de Tokkara  
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 15 años, 10 meses
Puntos: 5
Respuesta: Serio problemota

Ir renumerando el campo indice puede llegar a ser una tarea ardua para la BD sobre todo si la tabla es grande.
Puedes intentar extraer los datos y luego renumerarlos fuera usando PHP.

Código PHP:

$row 
mysql_query("SELECT * FROM tabla1");

$result = array();
while(
$r mysql_fetch_array($row))
{
  
$result[] = $r

Asi lo tendras renumerados desde fuera.

Aun así si lo quieres hacer como dices prueba esto:

Código PHP:

$cod_iden 
2;

//Borramos el campo que deseamos
mysql_query("DELETE FROM tabla WHERE cod_iden = ".$cod_iden);

//Decrementamos en 1 el cod_iden de todos los campos superiores a este
mysql_query("UPDATE tabla SET cod_iden = cod_iden-1 WHERE cod_iden > ".$cod_iden);

//Ahora si usas AUTO_INCREMENT en el campo de cod_iden tambien hay que alterarle. 
//Usamos esta sentencia para extraer el campo auto_increment
$r mysql_query("SELECT AUTO_INCREMENT FROM information_schema.table WHERE TABLE_SCHEMA = 'nombre_bd' AND TABLE_NAME = 'tabla'");

$result mysql_fetch_array($r);
$auto_increment $result["auto_increment"];

//Ahora alteramos el campo autoincrement restandole 1

mysql_query("ALTER TABLE tabla AUTO_INCREMENT = ".($auto_increment-1)); 

Esta codigo no es muy aconsejable pues hay muchas sentencias MySQL seguidas y algunas de ellas pueden ser muy pesadas.

No he probado el codigo. Pero la idea es clara.

Saludos
__________________
Revolucionario controlador de plantillas para php
www.simphple.com
  #7 (permalink)  
Antiguo 17/12/2008, 21:42
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 8 meses
Puntos: 32
Respuesta: Serio problemota

Hola quetal compañeros de foros del web pues pude solucionarlo posteo la solucion por si alguien la necesita

$correcion=mysql_query("select cod_iden from cargo where cod_iden>'$valor'");
while($row=mysql_fetch_array($correcion))
{
$actualizacion=mysql_query("update cargo set cod_iden=$row[cod_iden]-1 where cod_iden=$valor+1");
}


Muchas gracias a los que me ayudaron
  #8 (permalink)  
Antiguo 18/12/2008, 13:01
 
Fecha de Ingreso: abril-2008
Ubicación: Montevideo - Uruguay
Mensajes: 156
Antigüedad: 16 años
Puntos: 5
Respuesta: Serio problemota

Hi!

Que suerte lo hayas solucionado, igualmente recomendaria para ordenar hacer un campo extra (tipo: "orden" u "ord") y que con ese cambies, es más facil y no corres peligro si por esas casualidades de la vida tuviste que "hardcodear" algo :P

Es recomendación, espero te sea util. :)
-ByE-
__________________
--
Mi Portfolio Online! Visitalo!
--
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 20:07.