我有一个如下所示的表,其中 name 是分支名称,每个分支可以有一个父分支,它引用回同一个表中的 id 列。在此示例中,“Liverpool”、“Manchester”和“Chester”都是“North West”的子级,而“North West”本身又是“Master”的子级。
id name parent_id
1 Master 0
2 North West 1
3 Liverpool 2
4 Manchester 2
5 Chester 2
然后我有一个branchSettings表,如下所示:
id branch_id settingKey settingValue
1 1 waitTime 5
2 1 timeOutTime 10
3 2 waitTime 7
4 5 waitTime 15
分支 1(“主分支”)将始终拥有所有设置,因为它是主分支,每个子分支都应继承这些设置,但每个分支都可以根据需要覆盖默认设置。例如,“North West”(id 2)已将“waitTime”从 5 覆盖为 7,这应该级联到“Liverpool”、“Manchester”和“Chester”,但“Chester”(id 5)已决定“waitTime” ' 应该是 15 - 覆盖 'North West' 和 'Master'。
有没有一种简单的方法来级联 SELECT 命令,而不是在 PHP 中进行编码,我可以说...从表中选择branch_id = 5 的每个设置,并返回不存在覆盖的每个主设置,但是覆盖值在哪里呢?这样它就会返回:
id branch_id settingKey settingValue
2 5 timeOutTime 10
3 5 waitTime 15
谢谢
最佳答案
评论有点长。
您的问题是:“有没有一种简单的方法来级联 SELECT 命令?”
你的问题的答案是简单的“否”——至少在 MySQL 8.0 之前是这样。您正在存储分层数据。 SQL(一般来说)提供了处理此类数据的机制。 MySQL 目前不支持其中任何一个。
如果您的层次结构不是太深,那么仅在 PHP 中完成工作可能是最简单的解决方案。否则,您可能需要考虑构建信息的替代方法。 Here是一个很好的起点。
关于mysql - MySQL 中的级联 SELECT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46512138/