2012-07-16 6 views
7

J'utilise MySQL. J'ai une table où je dois être capable de trier manuellement la priorité/l'ordre des lignes. J'avais d'abord pensé à assigner à chaque rangée un ordre arbitraire (1, 2, 3, etc.), puis juste "échanger" l'ordre avec la rangée déplacée, mais je ne pense pas que ce soit la meilleure façon de le faire. Après avoir lu les questions connexes ici (like this one), beaucoup de gens ont dit d'attribuer une valeur à la colonne de priorité basée sur la colonne id (id * 1000). Et pour réorganiser les lignes, vous devez diviser/soustraire la différence entre les colonnes. Je ne comprends pas très bien comment cela fonctionne.Meilleure façon de stocker l'ordre de tri/la priorité?

Ceci est la disposition de la table que j'ai besoin de trier.

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 
) 

J'aimerais configurer un moyen facile de gérer la priorité des lignes afin que je puisse facilement les trier sans avoir à écrire beaucoup de code à tout gérer.

+0

Je crois qu'avec un peu plus de détails, il serait possible de répondre à cette question sans avoir recours à des astuces telles que les colonnes «prioritaires» qui sont permutées ou mises à jour. Pouvez-vous établir la formule pour le calcul de la priorité? Quel est le raisonnement derrière les "rangées mobiles"? Je soupçonne qu'un «ORDER BY» approprié pourrait être possible de produire –

+0

Considérez l'approche de liste liée. Cela évite d'avoir à mettre à jour toutes les autres lignes lorsque vous déplacez une ligne vers le haut ou vers le bas dans la liste. Avec une liste chaînée, il vous suffit de mettre à jour au plus trois lignes (dont celle que vous déplacez). Bien sûr, il est difficile de faire des requêtes à ce sujet, donc vous ne mettriez probablement en œuvre la commande que dans le code. –

+0

Cette application effectue des analyses financières sur nos clients. Nos utilisateurs doivent être en mesure de hiérarchiser certaines finances en les déplaçant vers le haut, et en déplaçant les finances moins prioritaires vers le bas. Ce processus est manuel car il y a trop de facteurs pour effectuer un tri automatique en utilisant ORDER BY. Parfois, les utilisateurs doivent déplacer une rangée du milieu vers le haut, et parfois la deuxième rangée vers le bas. – Jeff

Répondre

3

Je fini par suivre les conseils de cette question: https://stackoverflow.com/a/6804302/731052

Je mis la colonne ordre de tri = id * 1000 pour que je puisse obtenir des commandes uniques. Jusqu'à présent, cela fonctionne très bien et n'a pas eu de problèmes avec cela.

Questions connexes