2011-05-24 6 views
5

Tengo un campo en mi base de datos llamado "orden" y representa el orden en que aparecen las imágenes en la página. El orden de las imágenes es editable por el usuario, por lo tanto, una vez importadas, el usuario puede cambiarlas. Entonces digamos que tengo estas imágenes ordenadas como 1, 2, 3, 4, 5, 6, 7, 8 ... y el usuario mueve la imagen en la posición 8 a la 3ra posición ... ¿hay alguna? forma en SQL para actualizar todos los demás registros para mover una posición hacia arriba sin tener que leer cada elemento en PHP, editarlos y luego volverlos a poner?¿Puede SQL manejar algo como esto de forma nativa? Campo de pedido

Así que en este caso las imágenes en la posición 1 y 2 permanecen igual .... 8 se convierte en 3 ... 3 pasa a ser 4, 4 pasa a ser 5 y así sucesivamente

+1

me gustaría cambiar el nombre del campo 'order' a algo como' image_order 'de lo contrario, entrará en conflicto con la palabra clave SQL' ORDER' (si aún no se ha encontrado con esto) – Tony

+0

¿Para qué base de datos? –

Respuesta

2

Sí, es una instrucción de actualización sencilla:

UPDATE images SET order = order + 1 WHERE order > 3 and order < 8 

Aparte de eso, lo hace por supuesto necesidad de mover la fila original de 8 a 3.

+0

Su extracto solo crea un "orificio" entre 2 y 4, también necesita actualizar el que está siendo movido: 'UPDATE images SET order = 3 WHERE order = 8' – Tony

4

puede probar 1

como

1.) update tablename set `order` = `order` + 1 where `order` >= 3 
2.) update tablename set `order` = 3 where `order` = 9; ie (8 + 1) 
0

si el número prio se reduce:

UPDATE table SET prio = prio + 1 WHERE prio <= $new_prio 

si se incrementa:

UPDATE table SET prio = prio - 1 WHERE prio >= $new_prio 
1
update table set pos = case when pos = 8 then 3 else pos + 1 end where pos >= 3 
Cuestiones relacionadas