从表中删除行后维护连续的索引值


Maintain contiguous index values after deleting rows from a table

我正在开发一个计划构建应用程序,允许用户在计划内将活动添加到一天。

我有一个时间表,其中包含标题数据:

计划

名称、计划长度(以天为单位)、ID

以及保存活动 ID、计划 ID 和日偏移量的活动表。

日偏移量是指计划的"第 n"天。 我不需要存储特定的日期 - 这些日期是在以后将日程安排添加到某人的日历时添加的。

不一定在计划中的所有日期都有活动,或者实际上其中任何一天都有活动。

问题是 - 我希望能够从计划中删除天数(并为此插入 n 天)。

对于删除,用户可以突出显示他们正在编辑的计划中多天。

因此,在选择删除时,我将有一个要从活动表中删除的日期偏移量数组。 这一点是微不足道的。

我的问题是 - 如果我从计划中删除第 5 天,例如,第 6 天将成为新的第 5 天; 第 7 天成为新的第 6 天,依此类推,所以我需要更新表中所有受影响的活动记录。

我能想到的唯一方法是按升序排序要删除的天数,依次删除每个日期,然后搜索并递减日偏移量值高于已删除偏移量的所有记录。 然后,针对要删除的每一天重新运行此查询。

感觉效率很低,但我想不出更好的办法。有什么想法吗?

UPDATE `schedule` SET `day` = `day` - number_of_deleted_days WHERE `day` > first_day_deleted;

顺序并不真正取决于,您可以对其进行优化以使用连续范围,但据我所知,没有比这更好的了