Foros del Web » Programando para Internet » PHP »

Mover registros

Estas en el tema de Mover registros en el foro de PHP en Foros del Web. Hola. No se muy bien como puedo hacer en php para mover registros dentro de la misma tabla. Los registros son cien mil, pero yo ...
  #1 (permalink)  
Antiguo 12/12/2009, 11:19
 
Fecha de Ingreso: noviembre-2009
Mensajes: 164
Antigüedad: 14 años, 5 meses
Puntos: 0
Mover registros

Hola. No se muy bien como puedo hacer en php para mover registros dentro de la misma tabla.
Los registros son cien mil, pero yo quiero mover los que van del 20001 al 21000 (1000 registros) al principio de la tabla, es decir, desde el 1 al 1000.
Todo será igual, el problema es que cambie el id con php y no se como hacerlo. Les agradecería la ayuda.
  #2 (permalink)  
Antiguo 12/12/2009, 11:28
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Mover registros

Precia creacion de tu tabla en donde van a ir a parar los datos copiados

haces esta query
select * from [tuTablaACopiar] where id between (20001,21000);

Luego pones un while como si fueras a imprimir los resultados, y usas mysql_fetch_row o alguno de esos =)

Dentro del mismo while haces otra query que diga

update [tuTablaADondeVanAPararLosCopiados] set ($var)

Y listo
  #3 (permalink)  
Antiguo 12/12/2009, 12:07
 
Fecha de Ingreso: noviembre-2009
Mensajes: 164
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Mover registros

Disculpa jackson, pero no, para empezar no cambia el id (quiero que tome el id=1 cuando lo pase , no el id=20001).
  #4 (permalink)  
Antiguo 12/12/2009, 12:19
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Mover registros

ok, en vez de select * pones select [todoMenosElId] y se lo ingresas a mano con un contador
  #5 (permalink)  
Antiguo 12/12/2009, 12:20
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 21 años, 5 meses
Puntos: 20
Respuesta: Mover registros

Lo primero sería "desplazar" los registros, para que queden las primeras mil ids libres. Ejecutas esta query:

UPDATE tu_tabla SET id = id + 1000

Luego, haces el bucle que te ha dicho jackson666, pero antes del while declara una variable $nueva_id = 1, y en cada vuelta del bucle incrementas su valor con $nueva_id++ , y utilizas esa variable para asignar las nuevas id en cada vuelta.

Ten en cuenta que, al haber desplazado todos los registros, los que te interesan ya no están entre 20001 y 21000, sino entre 21001 y 22000.

Al final tendrás que volver a desplazar hacia abajo:
UPDATE tu_tabla SET id = id - 1000 WHERE id > 21000

Ésta es la teoría sin pulir mucho. Seguro que hay alguna manera de hacerlo en menos pasos, pero esto te funcionará. Suerte.
  #6 (permalink)  
Antiguo 12/12/2009, 12:30
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Respuesta: Mover registros

No se si el id es clave primaria o no, o si forma parte de algún índice, pero te doy un código sql que puede funcionar en todos los casos.
Pasaría por ejecutar 3 querys.

1) Alterar los id de los registros 1 al 1000 sumándoles un numero que los deje mas allá del mas grande de la tabla (por si hay un índice).

Código:
   update tabla set id=id+500000 where id between 1 and 1000
2) Pasar los id del 20001 al 21000 a al 1.

Código:
   update tabla set id=id-20000 where id between 20001 and 21000
3) Reposicionar los id que iban de 1 al 1000 donde estaban los del 20001 al 21000.

Código:
   update tabla set id=id-480000 where id between 500001 and 501000
Esa es mi idea, espero no haberme equivocado con los números.
  #7 (permalink)  
Antiguo 12/12/2009, 14:11
 
Fecha de Ingreso: noviembre-2009
Mensajes: 164
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Mover registros

ok, lo hice de una forma algo distinta, pero salió bien. Este es el código. Gracias a todos:
Nota: 52 son las filas que toma pero que no tengan vacío el campo descripcion (en este caso particular)
Cita:

CREATE TABLE clonada SELECT * FROM origen;


INSERT INTO `clonada` SELECT * FROM origen WHERE id>2000 and id<3001 and LENGTH(descripcion)>(0)

UPDATE clonada set id=id-2000 where id>2000 and id<2053 AND LENGTH(descripcion)>(0)

DELETE FROM clonada WHERE id>0 and id<53 AND LENGTH(descripcion)=(0)
Espero que ha alguien mas le sirve.
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 14:31.