我有一个用户可以注册的时间表。在管理端,管理员用户可以选择将两个时隙“链接”在一起,这基本上告诉最终用户,“如果您注册其中一个时隙,则必须注册所有其他链接的时隙它。“这些链接存储在另一个表中,该表有两列,一列是需要链接的时隙的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来实现它。我会提供一个代码示例,但我不认为它会有所帮助。
编辑:概念性答案很好。除非出于演示目的,否则我不需要为我编写的代码。
答案 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).