我有一个这样的数据库表,大约有 100 万行:
id prev curr next
1 25 26 27
2 26 27 28
3 27 45 46
4 45 46 47
5 46 47 48
6 47 59 41
..............
..............
在 java 方面,我需要做的是,对于给定的输入,如(curr = 45 和 diff = 2),我需要获取项目列表,如 45、27、26。对于输入(curr = 59 和 diff = 1),我需要得到 59, 47 正如您在上面看到的,prev 和 next 并不总是比当前值小 1 和大 1。
目前我在java中所做的是基于差异值,我查询表来获取curr的prev。然后使用 prev 作为 curr,我再次查询表并继续,直到我得到我正在寻找的东西。但是对于 20 或 30 等更高的 diff 值,这就是太多的数据库调用。
有人对在 1 个数据库查询中完成所有这些有任何想法吗?由于表中的行太多,因此无法在本地获取和保存数据。
编辑回复评论:
- 该表还包含其他列,因此数据不会只有 16MB。我只是剪掉了不相关的列。
- 当前字段中没有重复项。
- 还有其他函数使用 curr 和 next 列,类似于 prev 和 curr。
- 这不是树结构。所以最后一行是有效行。