mysql - MySQL 中的级联 SELECT 语句

标签 mysql select

我有一个如下所示的表,其中 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/

相关文章:

mysql - SQL:如何更改行顺序位置

mysql - 使用 MySQL 触发器替换输入

mysql插入值等于主键+ 1

sql - 查找日期之间差异的平均值 -Sql Select

mysql - 嵌套 SELECT 查找最高值,如果未找到则显示 0

mysql - Select count(*) from A update in B 超慢

MySQL 非常大的 INSERT ... SELECT 或 SELECT 然后 INSERTS 的应用程序级批处理

sql - 计算多个最高和最低列值的差异

mysql - 如何跨组过滤表格及其内容

php - mysql使用php安全快速的选择和插入