php - 同一路径(分支)内的最短字符串

标签 php mysql sql

我在 mysql 表中有一个基于 iddepthparent_idpath 的树表示。此表中的每个 root 记录的深度为 0parent_id != null 和基于十六进制的 path 表示用 0 向左填充的 ID 值。

树的每个元素都是通过指定 depth = parent.depth + 1, path = parent.path + hex(id), parent_id = parent.id(伪代码)例如:

id    path            depth    parent_id    assigned_user_id
------------------------------------------------------------
1     001             0        NULL         NULL
2     002             0        NULL         1
3     001003          1        1            2
4     002004          1        2            1
5     001003005       2        3            2
6     001003005006    3        5            2
7     002004007       2        4            1
8     002004008       2        4            2
9     002004009       2        4            2
10    00200400800A    3        8            2

等等... 问题是如何将特定用户 ID 的记录限制在同一分支 的最短路径内。例如对于 assigned_user_id = 2 检索:

id    path            depth    parent_id    assigned_user_id
------------------------------------------------------------
3     001003          1        1            2
8     002004008       2        4            2
9     002004009       2        4            2

代替:

id    path            depth    parent_id    assigned_user_id
------------------------------------------------------------
3     001003          1        1            2
5     001003005       2        3            2
6     001003005006    3        5            2
8     002004008       2        4            2
9     002004009       2        4            2
10    00200400800A    3        8            2

最佳答案

SELECT t1.*
FROM atable t1
  LEFT JOIN atable t2
    ON t2.assigned_user_id = t1.assigned_user_id AND
       t2.path = LEFT(t1.path, CHAR_LENGTH(t2.path)) AND
       t2.id <> t1.id
WHERE t1.assigned_user_id = 2
  AND t2.id IS NULL

关于php - 同一路径(分支)内的最短字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6162527/

相关文章:

php - 是否有可能在所有应用程序中使一个功能在 php 中全局可用

php - 更新彼此链接的三个表时出现问题

使用 While 循环创建的 PHP 列表 - 如何使用提交按钮更新所有内容

php - 删除输入中的 "Search"文本,仅适用于一个搜索框,不适用于所有搜索框

php - searchBar.resignFirstResponder() 导致 nil 值

php - 将sql表的1列内容传输到另一列

mysql - 尝试将表导出到 csv 文件时出错(错误代码 : 2)

sql - postgresql 中不存在该列?

sql - 为什么我的 "left join on"抛出 "unexpected token: on"错误?

sql - 复杂用户匹配算法性能