Pregunta

Tengo una tabla que contiene tareas y quiero darles un orden explícito según la prioridad de la tarea.La única manera que se me ocurre de hacer esto es a través de un único columna int que indexa dónde está la tarea en términos de prioridad (es decir,1 es el top 1000 es bajo).

El problema es que, si quisiera actualizar la tarea y establecer su prioridad en un valor más bajo, tendría que actualizar todas las demás filas entre su valor actual y su nuevo valor.

¿Alguien puede sugerir una mejor manera de implementar esto?

¿Fue útil?

Solución

Utilice un valor de número real como prioridad.Siempre puedes deslizar un valor entre dos valores existentes con algo como newPri = task1Pri + (task2Pri - task1Pri)/2 donde Tarea1 tiene el valor numérico de prioridad más baja (que probablemente sea la prioridad más alta).

Corin señala que las prioridades mínimas y máximas deberían calcularse para las tareas insertadas en la parte superior o inferior de la lista de prioridades.

Y joelhardi nos recuerda que un reordenar Es una buena idea limpiar la mesa de vez en cuando.

Otros consejos

En lugar de crear una columna numerada como dijiste, crea un campo llamado algo así como padre.Cada fila contiene el pk de su artículo principal.Cuando desee mover un elemento hacia abajo, simplemente cambie su paquete principal por el nuevo y los elementos que hacen referencia a él en su paquete principal.Piense en listas enlazadas individualmente.

Me gusta más la respuesta de Kevin, pero si quieres una solución rápida y sencilla, hazlo como ya lo has descrito, pero en lugar de incrementar en 1, incrementa en 10 o 100...De esa manera, si necesita volver a priorizar, tendrá cierto margen de maniobra entre las tareas.

Asignaría solo una pequeña cantidad de valores (1..10) y luego ORDENARÍA POR Prioridad DESC, Fecha de creación ASC.Si necesita tener diferentes prioridades para cada tarea, debe ACTUALIZAR DONDE Prioridad > xxx como dijo.

Si no hay dos tareas que puedan tener la misma prioridad, entonces creo que eso es lo que hay que hacer.Pero podría tener una prioridad y una columna de fecha de modificación y simplemente ordenarlas por ambas para obtener el orden correcto según la prioridad y la última actualización si permite que se duplique la prioridad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top