首页 > 解决方案 > 如何从匹配特定条件的表中递归选择行

问题描述

我们有一个 Mysql 表 user_documents。此表将文档与用户映射。

表的数据定义

  1. id - 表的主键
  2. document_id - 文档表的外键
  3. user_id - 用户表的外键。
  4. 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 和该用户的层次顺序记录 d​​ocument_id。

对于 user_documents 表中的 document_id = 1,层次结构是。

问题陈述

我们要为 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 数据库,但不确定如何实现这一点。

标签: mysql

解决方案


推荐阅读