gpt4 book ai didi

mysql - 具有多个级别的多重关系父/子

转载 作者:行者123 更新时间:2023-11-29 06:59:51 28 4
gpt4 key购买 nike

我有一个名为 companies 的 MySQL 表,如下所示:

+---------+-----------+-----------+
| id_comp | comp_name | id_parent |
+---------+-----------+-----------+
| 1 | comp1 | NULL |
| 2 | comp2 | 1 |
| 3 | comp3 | 2 |
| 4 | comp4 | 2 |
| 5 | comp5 | 2 |
| 6 | comp6 | 1 |
| 3 | comp3 | 6 |
| 5 | comp5 | 6 |
| 7 | comp7 | 6 |
| 4 | comp4 | 6 |
| 8 | comp8 | 4 |
+---------+-----------+-----------+

每个公司可能有多个父公司(例如:comp3,它是 comp2comp6 的子公司),每个父公司可能有多个子公司每个 child 都可以是多个 child 的 parent 本身,依此类推...因此,它可以有无限的级别(关系)。

我研究了几种解决方案( http://www.codeproject.com/Articles/818694/SQL-queries-to-manage-hierarchical-or-parent-childhttp://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ ),但我认为这不适合我的问题,因为同一家公司(基于 id_comp 列)可以有多个父公司。

对此我有两个问题:

  1. 如果我有数千个关系(可扩展),这是正确的方法吗?
  2. 给定一个name(这是唯一的,基于id_comp)查询,我该如何选择它的兄弟(相同的parent_id)、它的直接父代、及其直接子代。

最佳答案

您有一个简单的“多:多”关系。但是,您有一个并不真正相关(也不可检查)的限制,因为没有循环。

CREATE TABLE Relations (
id_comp ...,
id_parent ...,
PRIMARY KEY(id_comp, id_parent), -- for reaching "up"
INDEX(id_parent, id_comp) -- for reaching "down"
) ENGINE=InnoDB;

这将扩大到数百万甚至数十亿的关系。由于根据定义,PRIMARY KEYUNIQUEINDEX,因此它可以防止重复关系(12 的父级仅一次),并提供一种有效的方式来遍历一个方向。

必要时使用DISTINCT而不是GROUP BY。不要使用 IN ( SELECT ...),它往往会很慢。

我的 sibling :

SELECT DISTINCT their_kids.*
FROM Relations AS me
JOIN Relations AS my_parents ON my_parents.id_comp = me.id_parent
JOIN Relations AS their_kids ON their_kids.id_parent = parents.id_comp
WHERE me.id_comp = @me
AND their_kids.id_comp != @me;

我的(直系) parent :

SELECT my_parents.*
FROM Relations AS me
JOIN Relations AS my_parents ON my_parents.id_comp = me.id_parent
WHERE me.id_comp = @me;

我的(直系) child :

SELECT my_kids.*
FROM Relations AS me
JOIN Relations AS my_kids ON my_kids.id_parent = me.id_comp
WHERE me.id_comp = @me;

阿姨、叔叔、表 sibling 会有点困惑。所有祖先或后代都会更加困惑,应该通过应用程序代码或存储过程中的循环来完成。

关于mysql - 具有多个级别的多重关系父/子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43892661/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com