2012-11-30 47 views
2

例如我有節點使用索引如何重新指數(數)排序SQLite表

1 
2 
7 
8 

我需要改變索引

1 
2 
3 
4 

我可以

UPDATE TODO SET id = id + 1000000000 
UPDATE TODO SET id = id - (1000000000 + 1) 

(棘手因爲id必須是唯一的)

來移動所有的索引並且使得0 1 6 7但是我需要做出關係,需要使第一次索引移位到0,而其他索引移到前一索引。在sqlite中沒有存儲過程,所以我很關心如何在沒有變量的情況下創建這樣的關係?

歡迎每一個邏輯提示。

+0

爲什麼你需要重新索引?唯一重要的是他們是獨一無二的,而不是他們的實際價值是什麼? –

+1

爲了清楚起見,1 2 3 4更具可讀性,然後1 2 3 7。當然,有時候只是一直顯示1 2 3 4,但我想保留索引上的數字,用戶只能記住並重新索引當他想要。 – Cynede

回答

3

這個怎麼樣?

UPDATE todo SET id = rowid 
+1

只有'id'不是'rowid'時纔有效。 –

+0

真棒)但在此之前,我仍然需要更新TODO SET id = id + 1000000000作爲@CL指導 – Cynede

+0

http://sqlfiddle.com/#!7/81246/1/2 – Cynede

4
  1. 創建具有相同結構的新的空表,但使id自動增量列(其聲明爲INTEGER PRIMARY KEY);
  2. 副本中的所有記錄到該表中,在希望的順序,但沒有id柱:

    INSERT INTO NewTable(all_the, other, columns) 
    SELECT all_the, other, columns 
    FROM OldTable 
    ORDER BY id; 
    
  3. 刪除舊錶,並rename新一舊名稱。

(這將創建id首發爲1)

+0

這是最好的和最普遍的方法來做它!用一般的例子逐步解釋它。 – goetzc