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 | 3
piña | 4
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 | 4
piña | 5
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.