这似乎是一个令人费解的问题,但我会尽力阐明这个想法并说明一个场景。本质上,我有两个表需要组合并作为单个查询的结果集返回。一个表需要按特定顺序合并到另一个表中。
说表一称为Articles,表二称为Features。两个表都有一个带有唯一编号的ID字段。文章有一个日期字段,该字段将用于最初按降序对其记录进行排序。Features表有一个Delta字段,最初用于对其记录进行排序。Features表中的一些记录是占位符,并不意味着包含在最终集中。它们的唯一目的是影响排序顺序。每条记录在Delta字段中都有一个唯一值,从 1 - X 将用于对这些记录进行排序。另一个名为Skip的字段的值为1如果将两个表合并在一起时应该消除它。同样,跳过记录的唯一目的是在Features表的初始排序期间占用空间。即使它们是不必要的,它们也存在并且不能被删除。
棘手的部分是,当两个表的结果合并时,Features 表中的任何未跳过的记录都需要按照它们在Features表中出现的确切顺序插入到Articles表的结果中。
因此,假设我在Features表中有 6 条记录 A - F,并且 order 字段的范围为 1 - 6。记录 A、B、D、E 在Skip字段中的值都为 1。这意味着我只对记录 C 和 F 感兴趣,这两个记录都需要分别插入到位置 3 和 6 的最终记录集中。
Articles表的记录可能如下所示:
+----+------------+
| id | date |
+----+------------+
| 1 | 9999999999 |
+----+------------+
| 2 | 9999999998 |
+----+------------+
| 3 | 9999999997 |
+----+------------+
| 4 | 9999999996 |
+----+------------+
| 5 | 9999999995 |
+----+------------+
| 6 | 9999999994 |
+----+------------+
| 7 | 9999999993 |
+----+------------+
| 8 | 9999999992 |
+----+------------+
| 9 | 9999999991 |
+----+------------+
| 10 | 9999999990 |
+----+------------+
功能表可能如下所示:
+----+------+-------+------+
| id | name | delta | skip |
+----+------+-------+------+
| 11 | A | 1 | 1 |
+----+------+-------+------+
| 12 | B | 2 | 1 |
+----+------+-------+------+
| 13 | C | 3 | 0 |
+----+------+-------+------+
| 14 | D | 4 | 1 |
+----+------+-------+------+
| 15 | E | 5 | 1 |
+----+------+-------+------+
| 16 | F | 6 | 0 |
+----+------+-------+------+
结果看起来像这样(不包括实现我的目标可能需要的任何其他字段):
+----+
| id |
+----+
| 1 |
+----+
| 2 |
+----+
| 13 | (record from the Features table in the third position)
+----+
| 3 |
+----+
| 4 |
+----+
| 16 | (record from the Features table in the sixth position)
+----+
| 5 |
+----+
| 6 |
+----+
| 7 |
+----+
| 8 |
+----+
| 9 |
+----+
| 10 |
+----+
希望我的解释是有道理的。有任何想法吗?
谢谢,豪伊