Foros del Web » Programando para Internet » PHP »

Reordenar tablas MYSQL

Estas en el tema de Reordenar tablas MYSQL en el foro de PHP en Foros del Web. Buenas, Tengo una tabla en MYSQL la cual consta de lo siguiente: CREATE TABLE IF NOT EXISTS `projects` ( `id` int(11) NOT NULL default '0', ...
  #1 (permalink)  
Antiguo 19/03/2010, 13:52
 
Fecha de Ingreso: enero-2008
Mensajes: 34
Antigüedad: 16 años, 3 meses
Puntos: 0
Exclamación Reordenar tablas MYSQL

Buenas,

Tengo una tabla en MYSQL la cual consta de lo siguiente:
CREATE TABLE IF NOT EXISTS `projects` (
`id` int(11) NOT NULL default '0',
`nombre` varchar(30) NOT NULL default '',
`nombre2` varchar(30) NOT NULL default '',
`info` varchar(40) NOT NULL default '',
`info2` varchar(40) NOT NULL default '',
`year` varchar(20) NOT NULL default '',
`location` varchar(40) NOT NULL default '',
`foto` varchar(70) NOT NULL default '',
`foto1` text NOT NULL,
`foto2` text NOT NULL,
`foto3` text NOT NULL,
`foto4` text NOT NULL,
`foto5` varchar(200) NOT NULL default '',
`foto6` varchar(200) NOT NULL default '',
`foto7` varchar(200) NOT NULL default '',
`foto8` varchar(200) NOT NULL default '',
`foto9` varchar(200) NOT NULL default '',
`foto10` varchar(200) NOT NULL default '',
`foto11` varchar(200) NOT NULL default '',
PRIMARY KEY (`id`)

Tenemos un Panel de Control en el cual los usuarios pueden eliminar las fotos, aquí es cuando viene el problema.
Al eliminar una foto queremos que toda la tabla se reordene por número corelativos. Es decir, si eliminamos foto3 : foto 4 pasa a ser la foto3 y sucesivamente.
Este es el codigo en cuestión:
Código PHP:
if($_GET['foto_o']){
$foto_o addslashes($_GET['foto_o']);
$p addslashes($_GET['p']);
$result mysql_query("SELECT * FROM projects WHERE id='$p'") ;
while(
$row mysql_fetch_array$result )) {

        
$foto $row['foto']; 
        
$foto1 $row['foto1']; 
        
$foto2 $row['foto2']; 
        
$foto3 $row['foto3']; 
        
$foto4 $row['foto4']; 
        
$foto5 $row['foto5']; 
        
$foto6 $row['foto6']; 
        
$foto7 $row['foto7']; 
        
$foto8 $row['foto8']; 
        
$foto9 $row['foto9']; 
        
$foto10 $row['foto10']; 
        
$foto11 $row['foto11']; 
        
$fotos = array();
$fotos[1]=$foto1;
$fotos[2]=$foto2;
$fotos[3]=$foto3;
$fotos[4]=$foto4;
$fotos[5]=$foto5;
$fotos[6]=$foto6;
$fotos[7]=$foto7;
$fotos[8]=$foto8;
$fotos[9]=$foto9;
$fotos[10]=$foto10;
$fotos[11]=$foto11;

        }
        
$nom_e "foto".$foto_o

$num=12;
$num2 0;
echo 
"La foto que vas a borrar es: " ; echo $foto_o; echo "<br>"
while(
$num2<$num){
echo 
$num2;
if(
$num2<foto_o){echo "MENOR";}
if(
$num2==foto_o){
      echo 
"IGUAL";
        if(
$num2==0){ $name_n "foto"; } else {   $name_n "foto".$num2; }
        
$result mysql_query("UPDATE projects SET $num2='' WHERE id='$p'") ;}
if(
$num2>foto_o){
echo 
"MAYOR";
$num_n $num2-1;
        
$nom_e "foto".$num_n
        
        
$result mysql_query("UPDATE projects SET $nom_e='$fotos[$num2]' WHERE id='$p'") ;}
        
        
 
$num2++;
}      
 
$status =  "La foto se ha eliminado correctamente";

Como vereis, la petición de eliminar foto se pasa por método GET con el nombre: foto_o.
El problema se presenta cuando las comparaciones no las hace. Ejemplo: Eliminamos FOTO NUMERO 3 (foto3) y el resultado que devuelve es : 0 = 3, en vez de seguir el flujo del código, cuando tendria que ser, logicamente, MENOR QUE 3 Y simplemente mostrar el mensaje: MENOR.

Muchisimas gracias de antemano, toda ayuda es bien recibida.

Gracias.

P.D.: Si sabeis alguna otra fórmula mejor, compartidla por favor.
  #2 (permalink)  
Antiguo 19/03/2010, 14:34
rpv
 
Fecha de Ingreso: febrero-2010
Mensajes: 275
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: Reordenar tablas MYSQL

La pregunta es porque quieres que tu script procese sea de esta forma?, lo que intentas hacer es posible, pero cuando tu db tenga muchos registros se hará cada vez más caótico y menos recomendable, yo ahora mismo te sugiero que solo trabajes con MySQL, es decir, el procedimiento sería que tuvieras una tabla `gemela` para hacer las operaciones:

Código PHP:
Ver original
  1. // Borras 1 o varias fotos:
  2.  
  3. tu_procedimiento_para_borrar_fisicamente_las_fotos();
  4. //borrado de su parte lógica (en db)
  5. mysql_query('DELETE FROM tutabla_original WHERE id=33 OR id=34 or id=55');
  6.  
  7. //proceso de ordenado:
  8.  
  9. //copias a db gemela, con esta se copian todos los registros existentes:
  10. mysql_query('INSERT INTO tutabla_gemela (todos,tus,campos,menos,id) SELECT todos,tus,campos,menos,id FROM tutabla_original ORDER BY id ASC');
  11.  
  12. //limpias tabla original:
  13. mysql_query('TRUNCATE tutabla_original');
  14.  
  15. //regresas los valores:
  16. mysql_query('INSERT INTO tutabla_original  SELECT * FROM tutabla_gemela ORDER BY id ASC');
  17. // <- en este punto  tutabla_gemela contiene todos tus registros, pero en el insert no se especifico id entonces mysql asigna id's consecutivos
  18.  
  19. //limpias tabla gemela (para que quede lista para otro posible borrado):
  20. mysql_query('TRUNCATE tutabla_gemela');
  21.  
  22. //optimizas tabla original:
  23. mysql_query('OPTIMIZE TABLE tutabla_original');


*NOTA, ambas tablas deben tener id con la propiedad auto_increment para que funcione correctamente.

insisto, este procedimiento que buscas no es para nada recomendable.
  #3 (permalink)  
Antiguo 19/03/2010, 16:09
 
Fecha de Ingreso: marzo-2010
Ubicación: Lima, Perú
Mensajes: 136
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Reordenar tablas MYSQL

Que engorrosa manera de hacer las cosas,

yo haría dos tablas una con los datos de la persona y otras con las fotos:

CREATE TABLE IF NOT EXISTS `projects` (
`id` int(11) NOT NULL default '0',
.
.
.
`location` varchar(40) NOT NULL default '',
PRIMARY KEY (`id`)

CREATE TABLE IF NOT EXISTS 'fotos' (
`id` int(11) NOT NULL default '0',
id_projects int(11) NOT NULL default '0',
PRIMARY KEY (`id`)

ahora lo que no entiendo, porque los campos foto1, foto2... son text / varchar?

almacenas las fotos o comentarios en elllas ?

o hipervinculos?
  #4 (permalink)  
Antiguo 20/03/2010, 07:59
 
Fecha de Ingreso: enero-2008
Mensajes: 34
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Reordenar tablas MYSQL

Cita:
ahora lo que no entiendo, porque los campos foto1, foto2... son text / varchar?

almacenas las fotos o comentarios en elllas ?

o hipervinculos?
Almaceno hipervínculos, pero sí, lo mejor sería hacer dos tablas diferentes.
  #5 (permalink)  
Antiguo 20/03/2010, 08:21
 
Fecha de Ingreso: marzo-2010
Ubicación: Lima, Perú
Mensajes: 136
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Reordenar tablas MYSQL

Bueno creo que ya entendiste la idea,

suerte y cuenta como te fue

Etiquetas: mysql, tablas
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 04:52.