2012-11-30 18 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