mysql - 数据库邻接列表模型 - 在一个查询中获取所有相同级别的父级?

标签 mysql sql node.js

我有 2 个表。

nodes (nid, ntid, parent, title)

nid 是 Node ID(主键),ntid 是表 noteTypes

的外键

noteTypes (ntid, name) - 这个表只有 4 行

  • 1,书
  • 2,章节
  • 3、文章
  • 4,科

我需要为特定 Node 显示所有相同级别的父 Node 。示例:我收到 nid = 123,这是一篇文章的 ID,我需要获取所有章节(以便能够选择将文章移动到我的 node.js 应用程序中的位置)

我已经完成了 3 个查询:

1) 获取 nid=123 的父 id(返回 12,即文章的父 id)

2) 获取 nid=12 的父类型(返回 2,即章节)

3) 获取父类型=2 的所有 Node (返回所有章节)

使用这个数据库模型,是否可以只用 1 个查询而不是 3 个查询来完成?

最佳答案

因为您知道所需的确切级别,您可以创建一个查询(Mysql 不允许递归,递归允许您动态遍历关系)。

SELECT all_articles.*
FROM nodes AS articles
JOIN nodes AS chapter
  ON articles.parent = chapter.nid
JOIN nodes AS all_articles
  ON all_articles.parent = chapter.nid
WHERE articles.nid = 123;

关于mysql - 数据库邻接列表模型 - 在一个查询中获取所有相同级别的父级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22881257/

相关文章:

mysql - 在 SQL 中将负整数转换为 DATE

node.js - 如果在 facebook messenger 平台上发生 EAI_AGAIN 错误,我该如何解决?

php - 如何判断连接的数据库是MariaDB还是MySQL?

sql - 在 SQL Server 2012 中,INSERT INTO 随着时间的推移变得更慢

mysql加入线程收件箱

mysql - 这种格式有什么问题

node.js - Grunt 不会加载 Node 服务器

node.js - 在 Intellij IDEA 中使用 standard.js 进行 Linting

php - MySQL group_concat 并与另一个 group_concat 嵌套

python - 在 SQLAlchemy 中对多列进行排序的语法