下面列出了我的数据库中的一些表。
路线1移动地点1-地点2-地点1
。
route2 移动 place1-place2-place3-place2-place1
。
我需要创建一个占用 2 个位置的 SQL 查询:place1
和 place2
,并提供包含以下链接的路由的 routeID
道路井然有序。
我相信它需要在查询中递归。
有人可以帮我吗?我将非常感激。
最佳答案
这是一个起点Hierarchical queries in MySQL
快速提醒:分层数据是包含在一个表中的父子关系。
典型的任务是通过以下方式从表中返回值:
Resultset should be sorted like a tree, that is lexical sort by ancestry chains
Depth level should be returned along with each row
这可能听起来令人困惑,但实际上非常简单,如以下 Oracle 查询所示:
SELECT LPAD(' ', level * 4, ' ') || id, parent, level
FROM t_hierarchy
START WITH parent = 0
CONNECT BY parent = PRIOR id
我们有一个很好的树,按树排序,行根据深度级别缩进。
在上面的查询中,START WITH 定义树的根,CONNECT BY 定义父行和子行之间的连接条件。父列是通过添加 PRIOR 关键字来定义的。
在 MySQL 中没有这样的构造,但可以模拟它。
CREATE FUNCTION hierarchy_connect_by_parent_eq_prior_id(value INT) RETURNS INT
NOT DETERMINISTIC
READS SQL DATA
BEGIN
DECLARE _id INT;
DECLARE _parent INT;
DECLARE _next INT;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET @id = NULL;
SET _parent = @id;
SET _id = -1;
IF @id IS NULL THEN
RETURN NULL;
END IF;
LOOP
SELECT MIN(id)
INTO @id
FROM t_hierarchy
WHERE parent = _parent
AND id > _id;
IF @id IS NOT NULL OR _parent = @start_with THEN
SET @level = @level + 1;
RETURN @id;
END IF;
SET @level := @level - 1;
SELECT id, parent
INTO _id, _parent
FROM t_hierarchy
WHERE id = _parent;
END LOOP;
END
关于mysql - 创建 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25204541/