递归链接记录

时间:2011-05-10 20:44:11

标签: php mysql sql

我有一个用户可以注册的时间表。在管理端,管理员用户可以选择将两个时隙“链接”在一起,这基本上告诉最终用户,“如果您注册其中一个时隙,则必须注册所有其他链接的时隙它。“这些链接存储在另一个表中,该表有两列,一列是需要链接的时隙的ID,另一列是链接到的时隙的ID。

我怎样才能这样做,当一个时隙与另一个时隙相连时,BOTH依赖于另一个时隙被选中。对于其他链接的时隙,这也需要递归,如下例所示:

Admin says:

#1 is linked to #2
#3 is linked to #2

Therefore:

#1 is linked to #2
#2 is linked to #1
#3 is linked to #2
#2 is linked to #3
#3 is linked to #1
#1 is linked to #3

实现这一目标的最佳方法是什么?现在我正在尝试将这些信息放入链接表中,但如果还有另一种方法可以用更多的PHP和更少的SQL来实现它。我会提供一个代码示例,但我不认为它会有所帮助。

编辑:概念性答案很好。除非出于演示目的,否则我不需要为我编写的代码。

2 个答案:

答案 0 :(得分:1)

最简单的方法可能是制作时间段组表。然后你会有类似的东西:

   TIMESLOT_GROUPS
group_no    group_label
--------    ----------
1           whatever


     TIME_GROUPS
timeslot_no  group_no
-----------  --------
1            1
2            1
3            1

然后很容易看出哪些其他时间段与当前时间段相关。如果没有关于分组存储的信息(标签等),则实际上不需要timeslot_groups表。您只需要确保将您的组号保持唯一。 (我的猜测是“时间段组”是“课程”或“课程”,所以你可能已经有了这个表。)

答案 1 :(得分:1)

一种方法可能是以下形式的两列表:Node_Id和Link_Id。

在这种情况下,Node_Id是时间段ID。对于上面的示例,行将是:

1    1
2    1
3    1

第一列中的1,2,3是时隙,第二列中的1是链接。

假设让我们用链接2,3和4添加时隙4,5,6,7和8。

4    2
5    3
6    2
7    4
8    2

这转换为:

Pick 4, must also pick 6 and 8 (all are link 2).
Pick 5, you're done (only member of link 3).
Pick 6, must also pick 4 and 8 (all are link 2).
Pick 7, you're done (only member of link 4).
Pick 8, must also pick 4 and 6 (all are link 2).