mysql - 如何创建递归 mysql 查询以返回文档层次结构?

标签 mysql stored-procedures

我正在尝试创建一个 mysql 查询来遍历 modx 文档树以返回:

  • 文档 ID 数组
  • 顶部“N”文档

每个 modx 文档资源都有一个“父”id 字段,因此我需要为其提供一个子资源 id 和一个整数,该整数表示我想要从中提取 id 的树顶部的资源数量。即如果我喂它;

childid = 22,顶级资源 = 3,我希望结果集是:

----------------------------------------
|top|        parents                   |
----------------------------------------
| 5 | 1,2,5,6,7,8,etc                  |
----------------------------------------

我开始尝试编写一个程序,但到目前为止还没有太多运气:[即这个例子根本不起作用]

DROP PROCEDURE IF EXISTS getParentArray;

CREATE PROCEDURE getParentArray(childid);

BEGIN

DECLARE parent INT UNSIGNED DEFAULT 0;

WHILE parent != 0 DO

    SELECT `parent` AS `parentid` 
    FROM `modx_site_content` WHERE `id` = childid;

    SET parent = parentid;

    # somehow create a list of parents here? 

END WHILE;

END

CALL getParentArray(7055);

解决这个问题的最佳方法是什么?我是否走在正确的轨道上?

最佳答案

由于 MySQL 并不真正支持数组,因此最好的选择是:

(1) 字符串连接形成 csv 字符串,或

(2) 在存储过程中创建一个临时表,插入您的结果,然后在过程末尾select * 临时表以使其作为结果集返回。 (不要忘记在选择后删除临时表,您永远不知道 future 可以调用它的客户端可能会保持其连接事件状态多长时间。)

关于mysql - 如何创建递归 mysql 查询以返回文档层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30602352/

相关文章:

php - MySQL:如何检查用户(自己)是否有创建临时表的权限

mysql - 我应该什么时候开始新表?/个人资料图片

MySQL Sum + 同一表中的内部查询

mysql - ORA-02070 : database [MySQL] does not support subqueries in this context. - 甲骨文

MySQL 效率 - 一个查询中的重复语句是否会被执行多次?

html - 在不同表、Mysql、Node.js 中插入多个信息

mysql - 如何在mysql中添加或显示来自其他表计算的列值

mysql - 如何有效地将 View 用于复杂的MySQL数据库以用于CRUD?

python - 为什么当使用 os.system() 或 subprocess.Popen() 从 Python 调用时我的 MySQL 存储过程不执行?

mysql - 如何在mysql中创建程序来选择记录?