2009-07-29 4 views
1

Depuis dix ans, nous utilisons le même tri personnalisé sur nos tables, je me demande s'il existe une autre solution qui implique moins de mises à jour, d'autant plus qu'aujourd'hui nous Nous aimerions avoir une date de réplication/publication et ne voudrions pas que notre réplication reproduise des entrées inutiles. J'ai jeté un coup d'oeil sur les ensembles imbriqués, mais cela ne semble pas faire le travail pour nous.tri personnalisé ou la commande d'une table sans avoir recours à l'ensemble du shebang

table de base:

id | a_sort 
---+------- 
1 10 
2 20 
3 30 

Après avoir inséré:

insert into table (a_sort) values(15) 

Une entrée dans la seconde position.

id | a_sort 
---+------- 
1 10 
2 20 
3 30 
4 15 

commande la table:

select * from table order by a_sort 

et recours toutes les entrées de a_sort, la mise à jour au moins id = (2,3,4)
produisent bien entendu la sortie désirée: Les noms des colonnes, le nombre de colonnes, les types de données, une éventuelle jointure, les déclencheurs possibles ou la façon dont le centre de villégiature Nous avons également trouvé des moyens très pratiques pour effectuer cette tâche rapidement.

uniquement; comment diable pouvons-nous réduire les mises à jour dans le db à 1 ou 2 max.

Cela ressemble à un problème terriblement commun.

Le capitaine évidente dans moi thougth une fois "utiliser un float a_sort (53), insérer en utilisant une valeur fixe de ordervaluefirstentry + abs (ordervaluefirstentry-ordervaluenextentry)/2".
Mais cela n'autoriserait qu'environ 1040 entrées "entrantes" - donc le fait de ne jamais avoir recours semble un peu problématique;)

+0

Ooh, ça fait un nouveau tag, ça fait – skaffman

+0

une nouvelle étiquette très rarement utilisée? –

+0

le meilleur genre !! – skaffman

Répondre

0

Vous n'avez vraiment pas décrit ce que vous faites avec ces données, alors pardonnez-moi si c'est un idée folle pour votre situation:

Vous pourriez faire une sorte de 'liste chaînée' où à la place d'une colonne de valeurs, vous avez une colonne pour l'identifiant 'next value'. Cela réduirait le nombre de mises à jour à un maximum de 2.

Vous pouvez le faire doublement chaînée et ont également une colonne pour le prochain plus bas, ce qui porterait le nombre maximal de mises à jour 3.

Voir: http://en.wikipedia.org/wiki/Linked_list

+0

avec une liste liée avec ids (commun dans oop) j'aurais un problème avec l'instruction select récursive pour accéder aux données ordonnées. Comment écrirez-vous l'instruction sql (-92)? –

+0

Vous pouvez facilement le trier du côté client. Sélectionnez l'ordre par la colonne de lien afin que vous obteniez le null en premier (en supposant que vous soyez doublement lié, sinon vous avez besoin d'un nœud de tête) puis bouclez jusqu'à ce que vous obteniez un autre null. Je suppose que vous êtes en train de trier du côté client pour la mise à jour de toute façon. Vous pouvez le faire en utilisant une procédure stockée aussi. – Charlie

Questions connexes