Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/03/2009, 15:22
Avatar de alexbariv
alexbariv
 
Fecha de Ingreso: septiembre-2003
Ubicación: Mérida, Venezuela
Mensajes: 766
Antigüedad: 21 años, 5 meses
Puntos: 0
Pregunta Ordenando registros de una tabla utilizando un campo desde PHP

Hola a todos.

Tengo una aplicación que crea un listado de elementos, y lo guarda en la base de datos. La tabla tiene un id normalito y uno de posición. Algo así:

Código PHP:
  nombre   |  posicion
-----------------------------
  
manzana  |    1
  pera     
|    2
  fresa    
|    
  piña     
|    
La idea es que el usuario al insertar una fruta nueva vea un combo con las opciones, "insertar antes de", "insertar después de". Entonces suponiendo que el usuario seleccione " insertar 'melón' antes de 'pera' ", la aplicación atualice automáticamente todo lo superior a la pera por los valores correspondientes:

Código PHP:
  nombre   |  posicion
-----------------------------
  
manzana  |    1
  melon    
|    2
  pera     
|    3
  fresa    
|    
  piña     
|    
Esto lo he logrado a medias con este algoritmo:

Código PHP:

        $query 
"SELECT id_fruta,posicion FROM $tabla
                  WHERE posicion > {$_POST['posicion']}
                  ORDER BY posicion ASC"
;
        
$rs    $db->query($query);

        while (
$row $rs->fetch()) {

            
$p $row[1]+1;

            
$query  "UPDATE $tabla SET posicion = $p
                       WHERE id_fruta = {$row[0]}"
;

            
$db->exec($query);

        }

        
$query  "INSERT INTO $tabla(nombre,posicion)
                   VALUES ('{$_POST['nombre']}',{$_POST['posicion']})"

El post de posición siempre tendrá el número de la fruta que voy a cambiar de posición, por eso a todas las demás le sumo 1 para desplazarlas, y a la que estoy insertando le coloco el valor que seleccione.

El rollo que tengo es que no he logrado la organización a la hora de modficiar, es decir, decirle a una fruta "mover a despues de..." porque siempre se desordena. Puedo querer moverla al principio, al final, o insertarla en cualquier parte de la lista.

La base de datos es PostgreSQL y accedo a ella con PDO.

Espero haberme explicado bien en este rollo.

Agradezco de antemano toda la ayuda que puedan brindarme.

Éxitos y gracias.
__________________
"Piensa como una persona de acción y actúa como una persona que piensa."