保留数据库中的行序列

时间:2012-01-13 03:52:37

标签: sql

例如,我有一个水果下拉列表,我想以这个特定的顺序显示它们:   - 橙子(0)   - 葡萄(10)   - 芒果(20)   - 苹果(30) 我目前处理问题的方法是将索引添加10秒(因此我可以在其间插入额外的水果)。但是,这不是很有效,特别是如果插入的项目数超过9项。我有什么想法可以更好地实现这个目标吗?

4 个答案:

答案 0 :(得分:0)

我通常会在表格中添加priorityordering列,然后对其进行排序。这样,排序与主键分开,因此我可以轻松更改排序并添加新项目。

希望这有帮助!

答案 1 :(得分:0)

为什么不创建"类别"表,并包括以下字段: 类别ID 描述 SortOrder(1,2,3,4 ..)

然后在您的Fruits表格中,添加CategoryID,然后将Fruits加入到Categories中,并按OrderOrder,Fruitname ... ORDER加入

答案 2 :(得分:0)

如果您只想创建一个静态订单而不是更改它,那么其他人建议的ordering列可能就是您的选择。

如果您可能会更改订单并且列表很长,那将意味着更新相关订单后的每一行,这将导致大量锁定。您还可以指定水果的以下项目:

 FRUIT     NEXT_FRUIT
 Oranges   Grapes
 Grapes    Mangoes
 Mangoes   Apples
 Apples    (null)

然后你可以做(​​Oracle语法)

SELECT level, fruit FROM fruit_table
 START WITH fruit = 'Oranges'
CONNECT BY fruit = PRIOR next_fruit;

     LEVEL FRUIT
---------- ----------
         1 Oranges
         2 Grapes
         3 Mangoes
         4 Apples

然后,要添加新项目,您只需插入它并更新它之前的那个。

答案 3 :(得分:0)

你可以使用有理数,但还有更多实数。

这是一个玩笑,但浮动有足够的空间,并且要输入一个条目,它只是它之间的两个条目的中点。

通常对于这样的事情,我使用单独的INT SortOrder列(而不是主键)并且只进行轮班。如果表中包含大量实体数据,请将SortOrder列移到单独的表中,以避免索引问题。