2012-07-16 13 views
7

Estoy usando MySQL. Tengo una tabla donde necesito poder ordenar de forma manual la prioridad/orden de las filas. Originalmente pensé en asignarle a cada fila un orden arbitrario (1, 2, 3, etc.), y luego simplemente "intercambiar" el orden con la fila que se movía, pero no creo que esta sea la mejor manera de hacerlo.¿La mejor manera de almacenar orden de clasificación/prioridad?

Después de leer algunas preguntas relacionadas aquí (like this one), mucha gente ha dicho que asigne un valor a la columna de prioridad basada en la columna de identificación (id * 1000). Y para reorganizar las filas, debe dividir/restar la diferencia entre las columnas. No entiendo muy bien cómo funciona esto.

Este es el diseño de la tabla que necesito ordenar.

CREATE TABLE liability_detail (
    id int NOT NULL AUTO_INCREMENT, 
    analysis_id int NOT NULL, //(many-to-one relationship with analysis table) 
    other_columns various datatypes 
    sequence int DEFAULT 0 
) 

me gustaría configurar una forma sencilla de gestionar la prioridad de filas para que pueda resolver fácilmente sin tener que escribir mucho código para manejar todo.

+0

Creo que con un poco más de detalle sería posible responder a esto sin trucos como columnas de "prioridad" que se intercambian o actualizan. ¿Puedes diseñar la fórmula para el cálculo de prioridad? ¿Cuál es el razonamiento detrás de "mover filas"? Sospecho que un 'ORDER BY' apropiado podría ser posible para producir –

+0

Considere el enfoque de la lista enlazada. Esto evita tener que actualizar todas las otras filas al mover una fila hacia arriba o hacia abajo en la lista. Con una lista vinculada, solo tiene que actualizar como máximo tres filas (que incluyen la que está moviendo). Por supuesto, es difícil consultar en contra, por lo que probablemente implementará la orden solo en el código. –

+0

Esta aplicación realiza análisis financieros sobre nuestros clientes. Nuestros usuarios deben ser capaces de priorizar algunas finanzas moviéndolos a la cima, y ​​mover las finanzas de menor prioridad hacia abajo. Este proceso es manual porque hay demasiados factores para realizar una clasificación automática usando ORDER BY. En ocasiones, los usuarios necesitan mover una fila desde la mitad hacia la parte superior, y algunas veces hacia la segunda fila hacia la parte inferior. – Jeff

Respuesta

3

que acabó siguiendo los consejos de esta pregunta: ¿https://stackoverflow.com/a/6804302/731052

puse la columna de ordenación de orden = id * 1000 para que pudiera conseguir pedidos únicos. Hasta ahora, esto funciona muy bien y no ha tenido ningún problema con eso.

Cuestiones relacionadas