2017-06-17 138 views
0

我有以下的列如何讓所有的孩子記錄在MYSQL分層數據

id | parent_customer_id 
----------------------------- 
1 | 0 
2 | 0 
3 | 1 
4 | 2 
5 | 4 
6 | 4 

我想一個腳本,可以返回一個特定客戶的所有子ID的表。例如

get_child_ids (1) = 1,3 
get_child_ids(2) = 2,4,5,6 
get_child_ids(3) = 3 
get_child_ids(4) = 4,5,6 
get_child_ids(5) = 5 
get_child_ids(6) = 6 

某些ID可能會上升到10級。我發現了一個很好的解決方案,可以在https://explainextended.com/2009/07/20/hierarchical-data-in-mysql-parents-and-children-in-one-query/上獲得父母ID,但是我很難找到孩子

+0

什麼麻煩? id的數據與您共享示例數據中的其他id不同。 –

回答

1

最好的解決方案是「使用CTE語法編寫遞歸SQL查詢」,但直到MySQL 8.0.1才支持這種方法仍在發展中。

遞歸CTE語法是標準的SQL,所有流行品牌的SQL兼容的產品,現在的MySQL是支持它的支持。

我做了一個關於在MySQL的Percona的直播會議即將到來的遞歸查詢功能演示在2017年4月:Recursive Query Throwdown in MySQL 8

WITH RECURSIVE MyCTE AS (
    SELECT id, parent_customer_id FROM MyTable WHERE id = ? 
    UNION 
    SELECT id, parent_customer_id FROM MyTable JOIN MyCTE 
    ON MyTable.parent_customer_id = MyCTE.id 
) 
SELECT * FROM MyCTE; 

如果你不能使用MySQL 8.0.1或更高版本,可以在ExplainExtended使用聰明的解決方案,也可以存儲在另一種方式來支持非遞歸查詢您的分層數據。

我展示了一些解決方案在我的介紹Models for hierarchical data,或在我的回答What is the most efficient/elegant way to parse a flat table into a tree?

我也寫了一篇關於本章在我的書SQL Antipatterns: Avoiding the Pitfalls of Database Programming

0

您必須檢查有關Managing Hierarchical Data in MySQL

這是一個很好的文章,告訴您如何處理與「無限」深度hierarquical數據有很大的技術下面的文章。

注意的話語:如果你處理其中的孩子有一個獨特的父hierarquical數據,這是你一個很好的解決方案。但是,如果你正在處理的有多個父,那麼你處理圖形和針對理兒,MySQL的它並不適合你。您必須探索解決方案爲Neo4J而不是

相關問題