【问题标题】:Only when the stored procedure is ran twice it returns a full result set只有当存储过程运行两次时,它才会返回完整的结果集
【发布时间】:2026-01-06 06:15:02
【问题描述】:

我执行以下存储过程来获取特定folder id后代

CREATE PROCEDURE `SP_get_folder_structure`(
    I_folder_id VARCHAR(100),
    I_user_id INT,
    I_sys_id INT
)
BEGIN

    SELECT id, parent_id, root, name, quotum, owner, fullpath, createdon, editedon FROM
        (SELECT id, parent_id, root, name, quotum, owner, fullpath, createdon, editedon,
                CASE WHEN id = I_folder_id THEN @idlist := CONCAT(id)
                     WHEN FIND_IN_SET(parent_id,@idlist) THEN @idlist := CONCAT(@idlist,',',id)
                END as checkId
         FROM folders WHERE sys_id = I_sys_id) as T 
    WHERE checkId IS NOT NULL 
    ORDER BY id = I_folder_id DESC, parent_id ASC, name ASC LIMIT 100;
END

当我在 MySQL Workbench 上执行此代码时,它只在执行两次查询后返回一个完整的结果集,第一次它只返回一行:

我很困惑为什么会这样。有人有想法吗?

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案1】:

    @idlist 的值很可能在第一次和第二次运行之前是不同的。为什么不尝试创建一个没有@idlist 的过程或确保它已初始化?

    【讨论】: