Domanda

Ho una tabella che contiene attività e desidero dare a queste un ordine esplicito basato sulla priorità dell'attività. L'unico modo in cui posso pensare di farlo è tramite una colonna unica int che indicizza dove l'attività è in termini di priorità (ovvero 1 è tra i primi 1000 è basso).

Il problema è che dire che volevo aggiornare l'attività e impostarne la priorità su un valore inferiore, avrei dovuto aggiornare tutte le altre righe tra il suo valore corrente e il suo nuovo valore.

Qualcuno può suggerire un modo migliore per implementarlo?

È stato utile?

Soluzione

Usa un valore numerico reale come priorità. Puoi sempre far scorrere un valore tra due valori esistenti con qualcosa come newPri = task1Pri + (task2Pri - task1Pri) / 2 dove Task1 ha il valore numerico con priorità più bassa (che è probabilmente la piority maggiore).

Corin sottolinea che le priorità min e max dovrebbero essere calcolate per le attività inserite nella parte superiore o inferiore dell'elenco delle priorità.

E joelhardi ci ricorda che un processo riordina è una buona idea per ripulire il tavolo di tanto in tanto.

Altri suggerimenti

Invece di creare una colonna numerata come hai detto, crea un campo chiamato qualcosa come parent. Ogni riga contiene il pk del suo elemento padre. Quando vuoi spostare un oggetto verso il basso basta cambiare il suo genitore pk in quello nuovo e gli oggetti che lo fanno riferimento nel loro genitore pk. Pensa a liste collegate singolarmente.

Mi piace la risposta di Kevin, ma se vuoi una soluzione rapida e sporca, fallo come hai già descritto, ma invece di incrementare di 1, aumentare di 10 o 100 ... in questo modo se devi ridefinire le priorità, hai un po 'di spazio tra le attività.

Vorrei assegnare solo un piccolo numero di valori (1..10) e quindi ORDER BY Priority DESC, DateCreated ASC. Se devi avere priorità diverse per ogni attività, devi AGGIORNARE DOVE Priorità > xxx come hai detto.

se non ci sono due compiti che possono avere la stessa priorità, penso che sia quello che devi fare. Ma potresti avere una colonna prioritaria e una data modificata e ordinare solo per ottenere l'ordine giusto in base alla priorità e all'ultimo aggiornamento se consenti la duplicazione della priorità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top