我有两张桌子:
+---------------------------------+
| ORGANIZATION |
+----------------+----------------+
| ORG_ID | PARENT_ID |
+----------------+----------------+
| 1 | null |
| 22 | 1 |
| 333 | 22 |
+---------------------------------+
和第二个ORGs层次结构:
Org ID# 1
|
|----- Org ID# 22
[MT -> value]
[TMP -> value]
|
|----- Org ID# 333
[CC -> value]
[MT -> shows value defined in parent #22]
[TMP -> redefined value]
表示参数的层次结构' UI上的值:
+----------------+--------------------+----------------+
| ORG_ID | NAME | VALUE |
+----------------+--------------------+----------------+
| 333 | CC | ... |
| 22 | MT | ... |
| 333 | TMP | ... |
+------------------------------------------------------+
这就是事情:如果父母和孩子都定义了一些属性值(例如示例中的TMP),我们总是应该向孩子返回由孩子重新定义的值。
所以,我想查询一个给定的子ID(或者从子到root的所有ID的集合)将返回我在最后一级定义的记录。
,例如,对于上面的例子,如果我通过333(或1,2,233的集合),我希望得到一个结果:
add_ordered()
来自子ORG#333的TMP值将从父ORG#22隐藏一个。
所以,我需要以某种方式过滤父ORG的记录,只留下实际的子ORG记录。同时,如果某个值未在子级别重新定义,我们将从其父级获取值(与在ORG#22中定义但未在ORG#333中重新定义的MT)。
我该怎么做?
非常感谢!
答案 0 :(得分:0)
这应该是一个评论,但它有点长。由于mysql没有“connect by”运算符,因此你很难在mysql中执行此操作。唯一可行的解决方案是编写一个递归过程来填充临时表。但它效率不高。实际上,一种解决方案取决于数据更改的频率,将映射应用于数据库中的所有节点。其他解决方案(图形引擎,地理空间索引或替代模式)是否更合适将取决于更改的频率,记录数量,数据的分布和基数(您未提及)。