Ext*_*kun 9 mysql recursion hierarchy
我有一个数据库表,将位置链接在一起; 位置可以位于其他位置内的位置.
location (<id>, ....)
location_parent (<location_id>, <parent_id>)
Run Code Online (Sandbox Code Playgroud)
这是MySQL/PHP的深度:
$sql = "SELECT id FROM se_locations_services WHERE parent_locationid IN
( SELECT location_id FROM se_locations_parent WHERE parent_id = '$locationid' )";
Run Code Online (Sandbox Code Playgroud)
在给定父位置的情况下,如果使用MySQL,无论多深,都能获得所有后代位置?
小智 6
这是一个老问题,但因为我偶然发现了这个寻找解决方案。
从 MySQL 8.0 开始,您可以为此使用递归 CTE:
WITH RECURSIVE tmp (id) AS
(
SELECT id
FROM locations
WHERE parent_id IS NULL
UNION ALL
SELECT l.id
FROM tmp AS p JOIN locations AS l
ON p.id = l.parent_id
)
SELECT * FROM tmp
ORDER BY id;
Run Code Online (Sandbox Code Playgroud)
这假设与原始问题中的数据库结构略有不同(例如,只有一个包含父/子的表),但是,我确信这种技术也适用于那里。