mysql - 如何从匹配特定条件的表中递归选择行
问题描述
我们有一个 Mysql 表 user_documents。此表将文档与用户映射。
表的数据定义
- id - 表的主键
- document_id - 文档表的外键
- user_id - 用户表的外键。
- hierarchy_order - 层次结构的顺序。
样本表数据
| id | document_id | user_id | hierarchy_order |
| 1 | 1 | 1 | 1 |
| 2 | 1 | 2 | 2 |
| 3 | 1 | 3 | 3 |
| 4 | 1 | 4 | 4 |
| 5 | 2 | 1 | 1 |
| 6 | 2 | 3 | 2 |
| 7 | 2 | 2 | 3 |
| 8 | 2 | 4 | 4 |
| 9 | 3 | 2 | 1 |
| 10 | 3 | 1 | 2 |
| 11 | 3 | 3 | 3 |
| 12 | 3 | 4 | 4 |
| 13 | 4 | 1 | 1 |
| 14 | 4 | 3 | 2 |
| 15 | 4 | 4 | 3 |
| 16 | 4 | 2 | 4 |
我们有一个层次结构表,以简单的层次结构列出用户。该表经常更改,用户的顺序也会更改。
我们不能依赖层次结构表,因为它经常变化。因此,我们使用 user_id 和该用户的层次顺序记录 document_id。
对于 user_documents 表中的 document_id = 1,层次结构是。
- 级别 1(顶级)- user_id - 1
- 级别 2 - user_id - 2
- 级别 3 - user_id - 3
- 级别 4 - user_id - 4
问题陈述
我们要为 user_id 2 和其他用户选择所有记录/行,这些用户的层次顺序大于或等于 user_id 2 hierarchy_order 的所有 document_id。
预期产出
| id | document_id | user_id | hierarchy_order |
| 2 | 1 | 2 | 2 |
| 3 | 1 | 3 | 3 |
| 4 | 1 | 4 | 4 |
| 7 | 2 | 2 | 3 |
| 8 | 2 | 4 | 4 |
| 9 | 3 | 2 | 1 |
| 10 | 3 | 1 | 2 |
| 11 | 3 | 3 | 3 |
| 12 | 3 | 4 | 4 |
| 16 | 4 | 2 | 4 |
我们正在使用 MySQL 数据库,但不确定如何实现这一点。
解决方案
推荐阅读
- javascript - JavaScript DOM 和 JQuery 事件的区别
- asp.net - 如何使 IIS 根据 Windows 用户名或组成员身份对请求进行授权?
- node.js - 数据路径“.builders['app-shell']”应该具有必需的属性“类”。2020 更新
- c# - 如何将 C# 类作为字符串 UserInput,并使其可用于 ASP.NET Core 运行时?
- php - PHP 安装没有 php.ini 文件。我究竟做错了什么?
- javascript - 父组件更改状态时子组件不会获得新的道具(功能组件)
- sql - 将整列加上另一列的单行相加并显示在第三列中
- c# - HTML Agility Pack 无法从 div 获取文本内容
- java - Spring Boot 异常处理程序:用户不存在
- c - 如何强制使一个线程在c中首先执行