Question

J'ai une table qui contient des tâches et je souhaite leur donner un ordre explicite basé sur la priorité de la tâche. Pour ce faire, la seule solution consiste à utiliser une colonne unique int qui indique où la tâche correspond à la priorité (c.-à-d. Que 1 parmi les 1 000 premiers est faible).

Le problème est que je voulais mettre à jour une tâche et définir sa priorité sur une valeur inférieure. Je devrais mettre à jour toutes les autres lignes entre sa valeur actuelle et sa nouvelle valeur.

Quelqu'un peut-il suggérer un meilleur moyen de mettre cela en œuvre?

Était-ce utile?

La solution

Utilisez une valeur numérique réelle comme priorité. Vous pouvez toujours faire glisser une valeur entre deux valeurs existantes avec quelque chose comme newPri = task1Pri + (task2Pri - task1Pri) / 2 où Task1 a la valeur numérique de priorité la plus faible (qui est probablement la priorité la plus élevée). / p>

Corin précise que les priorités minimale et maximale devraient être calculées pour les tâches insérées en haut ou en bas de la liste des priorités.

Et joelhardi nous rappelle qu'un processus de réorganisation est une bonne idée de nettoyer la table de temps en temps.

Autres conseils

Au lieu de créer une colonne numérotée comme vous l'avez dit, créez un champ appelé quelque chose comme parent. Chaque ligne contient le pk de son élément parent. Lorsque vous souhaitez déplacer un élément vers le bas, il suffit de remplacer son pk parent par le nouveau et le ou les éléments qui le référencent dans leur pk parent. Pensez à des listes liées individuellement.

J'aime mieux la réponse de Kevin, mais si vous voulez une solution rapide et simple, faites-la comme vous l'avez déjà décrit, mais au lieu d'incrémenter de 1, augmentez de 10 ou 100 ... de cette façon si vous devez redéfinir les priorités, vous avez un peu de marge de manœuvre entre les tâches.

Je n’attribuerais qu’un petit nombre de valeurs (1..10), puis ORDER BY, priorité DESC, DateCreated ASC. Si vous avez besoin de priorités différentes pour chaque tâche, vous devez MISE À JOUR O Priority Priorité > xxx comme vous l'avez dit.

Si aucune tâche ne peut avoir la même priorité, je pense que c'est ce que vous devez faire. Mais vous pouvez avoir une priorité et une colonne datemodified et trier les deux pour obtenir le bon ordre en fonction de la priorité et la dernière mise à jour si vous autorisez la duplication de la priorité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top