使用单个递归查询查找 MySQL 表中的所有父项
考虑以下 MySQL 表架构和示例数据:
| ID | TITLE | CONTROLLER | METHOD | PARENT_ID | |----|-------------------|------------|-------------------|-----------| | 1 | Dashboard | admin | dashboard | 0 | | 2 | Content | admin | content | 0 | | 3 | Modules | admin | modules | 0 | ...
挑战:
我们的目标是使用单个记录查找特定记录的所有父记录,即标题=“类别”的记录SQL 查询。
所需输出:
id | title | controller | method | url | parent_id ---------------------------------------------------------------- 3 | Modules | admin | modules | (NULL) | 0 17 | User Modules | modules | user_module | (NULL) | 3 31 | Categories | categories | category | (NULL) | 17
解决方案:
我们采用递归公用表表达式(CTE)来遍历表层次结构并识别所需的所有祖先记录:
WITH RECURSIVE Parents AS ( SELECT id, parent_id FROM menu WHERE id = 31 UNION ALL SELECT m.id, m.parent_id FROM Parents AS p JOIN menu AS m ON p.parent_id = m.id ) SELECT m.id, m.title, m.controller, m.method, m.url, m.parent_id FROM Parents AS p JOIN menu AS m ON p.id = m.id ORDER BY p.id DESC;
解释:
通过执行此查询,我们获得所需的输出,列出了类别记录。
以上是如何使用单个递归查询查找 MySQL 表中记录的所有祖先?的详细内容。更多信息请关注PHP中文网其他相关文章!