开发者社区> 问答> 正文

使用单个查询(递归查询)在mysql表中查找所有父级?mysql

我有这个架构

样本数据

IDTITLECONTROLLERMETHODPARENT_ID
1Dashboardadmindashboard0
2Contentadmincontent0
3Modulesadminmodules0
4Usersadminusers0
5Settingsadminsettings0
6Reportsadminreports0
7Helpadminhelp0
8Pagescontentpages2
9Mediacontentmedia2
10Articlescontentarticles2
11Menuescontentmenues2
12Templatescontenttemplates2
13Themescontentthemes2
14Blogcontentblog2
15Forumcontentforum2
16Core Modulesmodulescore_module3
17User Modulesmodulesuser_module3
18All Usersusersall_users4
19Groupsusersgroups4
20Permissionsuserspermissions4
21Import and Exportusersimport_export4
22Send Emailuserssend_mail4
23Login Recordsuserslogin_records4
24General Settingssettingsgeneral_settings5
25Email Settingssettingsemail_settings5
26Popular Contentreportspopular_content6
27Most Active Usersreportsmost_active_users6
28Documentationhelpdocumentation7
29Abouthelpabout7
30Productsproductsproduct17
31Categoriescategoriescategory17

SQL Fiddle演示。我已经插入了一些示例数据。

查兰芝

我需要找到唱片标题的所有父母Categories。如何仅通过一个查询就可以获取所有父母? 我的意思是我需要这个结果:

期望的输出

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
假设我想使用其所有父项来获取条目,并且要使用where条件id = 31,那么它应该获取上述记录。

展开
收起
保持可爱mmm 2020-05-16 22:01:05 514 0
1 条回答
写回答
取消 提交回答
  • SELECT T2.id, T2.title,T2.controller,T2.method,T2.url FROM ( SELECT @r AS _id, (SELECT @r := parent_id FROM menu WHERE id = _id) AS parent_id, @l := @l + 1 AS lvl FROM (SELECT @r := 31, @l := 0) vars, menu m WHERE @r <> 0) T1 JOIN menu T2 ON T1._id = T2.id ORDER BY T1.lvl DESC;来源:stack overflow

    2020-05-16 22:01:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像