2012-01-13 111 views
1

比如我有水果的下拉列表中,我想在這個特定的順序來顯示它們: - 橙子(0) - 葡萄(10) - 芒果(20) - 蘋果(30) 我目前處理這個問題的方法是添加一個索引10秒(所以我可以插入額外的水果之間)。但是,這不是非常有效,特別是如果插入的項目數量超過9項。任何想法如何我可以更好地實施這一點?保留行序列數據庫

+0

增加100?它仍然是同一個整數列,所以沒有更多或更少的效率。 – 2012-01-13 03:59:14

+0

如果存在相同的排序值,我通常會使用任意值的排序順序列和名稱上的輔助alpha排序,但是如果您必須保留不起作用的確切順序。 – 2012-01-13 04:00:46

回答

0

我通常給表priorityordering列,然後對其進行排序。這樣,排序與主鍵分開,所以我可以輕鬆地更改排序並添加新項目。

希望這會有所幫助!

0

爲什麼不創建一個「分類」表,幷包括以下字段: 類別ID 說明 SortOrder的(1,2,3,4 ......)

然後在你的水果表,添加類別ID,然後加入水果分類和ORDER BY SortOrder,水果名...

0

如果你只是要創建一個靜態訂單,而不是很改變它,其他人建議的ordering列可能是要走的路。

如果您很可能會更改訂單並且列表很長,那麼這意味着更新相關問題後的每一行,這會導致大量鎖定。你也可以指定一個水果的以下項目:

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

然後你可以做(​​甲骨文語法)

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 

然後,添加一個新的項目,你只需要插入和一個前更新到它。

0

你可以使用有理數,但有更多的實數。

這是一個笑話,但一個浮點數有足夠的空間,並且要輸入一個條目,它只是兩個條目之間的中點。

通常對於這樣的事情,我使用一個單獨的INT SortOrder列(不是主鍵),只是做班次。如果表格確實很寬並且其中包含大量實體數據,請將SortOrder列移到單獨的表格中以避免索引問題。