Foros del Web » Programando para Internet » PHP »

Reordenar IDentificadores de una tabla por PHP

Estas en el tema de Reordenar IDentificadores de una tabla por PHP en el foro de PHP en Foros del Web. Buenas a todos Tengo una duda para comentar. Necesito reordenar el campo de identificadores de una tabla de manera que primero ordeno todas las filas ...
  #1 (permalink)  
Antiguo 04/07/2008, 00:55
 
Fecha de Ingreso: noviembre-2007
Ubicación: Zamora (Spain)
Mensajes: 251
Antigüedad: 17 años
Puntos: 1
Pregunta Reordenar IDentificadores de una tabla por PHP

Buenas a todos

Tengo una duda para comentar. Necesito reordenar el campo de identificadores de una tabla de manera que primero ordeno todas las filas por fecha ascendente y luego mi intención es recorrerla y rellenar los campos de identificación, (PrimaryKey), por orden numérico, (1,2,3,...n).

Caso práctico:
Código:
//Reordenar IDs
	$idnew=1;
	$consulta = mysql_query("SELECT * FROM noticias_es ORDER by fecha ASC",$conexion);
	
	 while ($row = mysql_fetch_row($consulta))
	{
		mysql_query("UPDATE noticias_es SET idnoticia='$idnew' WHERE idnoticia='$row[0]'");
		echo $idnew ."-". $row[0];
		echo "<br>";
		$idnew++;
	}
El problema es que no lo hace. Hace tiempo tuve que hace algo parecido pero cuando se borraba un registro y los campos de IDentificación quedaban desoordenados por la falta de correlación, (1,2,4,5,8...n)

En este caso realice algo casi similar y funcionó. Cosa que ahora viendo esto me desespera un tanto y no localizo el error.

Código:
//Reordenar IDs
	$idnew=1;
	$consulta = mysql_query("SELECT * FROM atria_es ORDER by idatria ASC",$conexion);
	while ($row = mysql_fetch_row($consulta))
	{
		mysql_query("UPDATE atria_es SET idatria='$idnew' WHERE idatria='$row[0]'");
		$idnew++;
	}
Espero que se os ocurrá algo. Gracias y un saludo.
  #2 (permalink)  
Antiguo 08/07/2008, 01:56
 
Fecha de Ingreso: noviembre-2007
Ubicación: Zamora (Spain)
Mensajes: 251
Antigüedad: 17 años
Puntos: 1
Respuesta: Reordenar IDentificadores de una tabla por PHP

No se le ocurre nada a nadie ¿?
  #3 (permalink)  
Antiguo 08/07/2008, 02:27
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 9 meses
Puntos: 81
Respuesta: Reordenar IDentificadores de una tabla por PHP

Una consulta... el idatria tiene la definicion de auto_increment ??
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #4 (permalink)  
Antiguo 08/07/2008, 02:33
 
Fecha de Ingreso: noviembre-2007
Ubicación: Zamora (Spain)
Mensajes: 251
Antigüedad: 17 años
Puntos: 1
Respuesta: Reordenar IDentificadores de una tabla por PHP

Nop. Se la aumento cada vez que genero un nuevo registro.
  #5 (permalink)  
Antiguo 08/07/2008, 03:00
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 9 meses
Puntos: 81
Respuesta: Reordenar IDentificadores de una tabla por PHP

Agrega esto en el codigo del update:
Código PHP:
if(mysql_query("UPDATE atria_es SET idatria='$idnew' WHERE idatria='$row[0]'")){
    
$idnew++;
}else{
    die(
'Error en la consulta: '.mysql_error());

__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #6 (permalink)  
Antiguo 08/07/2008, 03:03
 
Fecha de Ingreso: noviembre-2007
Ubicación: Zamora (Spain)
Mensajes: 251
Antigüedad: 17 años
Puntos: 1
Respuesta: Reordenar IDentificadores de una tabla por PHP

Me supongo que dentro del while, verdad ¿?

Gracias por molestarte en ayudarme.
  #7 (permalink)  
Antiguo 08/07/2008, 03:09
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 9 meses
Puntos: 81
Respuesta: Reordenar IDentificadores de una tabla por PHP

Sip... dentro del while :D

Y no te preocupes ;) ayudar no cuesta nada =)
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #8 (permalink)  
Antiguo 08/07/2008, 03:10
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 20 años
Puntos: 48
Respuesta: Reordenar IDentificadores de una tabla por PHP

El problema puede ser que al ordenar por fecha te queden los id ordenados tal que 3,4,1,2

Desarrollemos el bucle

1 iteracion:
$idnew=1
$row[0]=3
update: cambiar 3 por 1
lista ids: 1,4,1,2 <------ *** FALLO

Falla porque al ser un primary key debe ser unica, y con ese cambio quedarian 2 ids con el mismo valor, 1.

Una solucion seria sumar a todos los ids el numero total de registros, en el ejemplo son 4 registros, sumamos 4 a los ids: 7,8,5,6 . Asi como los nuevos ids van a ir de 1 a 4, nunca se van a repetir al cambiarlos por los nuevos.
  #9 (permalink)  
Antiguo 11/07/2008, 03:05
 
Fecha de Ingreso: noviembre-2007
Ubicación: Zamora (Spain)
Mensajes: 251
Antigüedad: 17 años
Puntos: 1
Respuesta: Reordenar IDentificadores de una tabla por PHP

La propuesta DarkJ es buena y el desarrollo es lógico. Pero por que con el otro caso en el que re ordeno los IDs después de borrar el registro no me sucede ¿?

Tengo que probar lo de sumar lo que me planteas y os cuento.
  #10 (permalink)  
Antiguo 11/07/2008, 03:14
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 20 años
Puntos: 48
Respuesta: Reordenar IDentificadores de una tabla por PHP

Muy sencillo. En el otro caso que comentas los ids a modificar ya estan ordenados por id, por ejemplo, 1,3,4,7 . Por eso al sustituir el id lo vas a hacer por el mismo ID que tenia o por un nuevo id mas pequeño que no existe en la lista de ids. Es decir, el si cambias el id lo haces por uno que no existia.

En cambio, en este caso, al estar ordenado por fecha, si quieres cambiar el id por su puesto, te puede dar el caso que puse en el otro mensaje: que intentes meter un id que existe mas adelante en la lista, y como eso no puede ser, falla.
  #11 (permalink)  
Antiguo 11/07/2008, 03:17
 
Fecha de Ingreso: noviembre-2007
Ubicación: Zamora (Spain)
Mensajes: 251
Antigüedad: 17 años
Puntos: 1
Respuesta: Reordenar IDentificadores de una tabla por PHP

Coño es verdad. Porque no tendría profesores de desarrollo como tu en vez del capullo que me toco....
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 22:32.