私はid
,depth
,parent_id
およびpath
に基づいてmysqlテーブルにツリー表現をしています。 ルートのレコードは、0
の左に埋め込まれたIDの16進値に基づく0
,parent_id != null
およびpath
の表現を有しています。同じパス内の最短文字列(ブランチ)
ツリーのすべての要素を指定することによって構成され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
retriveのために:
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
わかりません。最短パスが必要ですが、希望する出力にはパス長の異なる複数のレコードがあります。レコードを選択する基準が何であるかを明確にしてください。 – Krab
@Krabパスの先頭は等しくなければなりません。コメントありがとう、私は私の質問を更新します。 – veritas
基本的に、私はその質問を理解していると思う。私はあなたにこの状況を詳しく説明してほしい。パス「001003」と「001003005006」で定義された項目がユーザ「2」に割り当てられ、「001003005」がユーザ「1」に割り当てられているとする。 '001003005006'が' 001003'で始まるという理由だけで '001003005006'を却下するのは正しいでしょうか?言い換えれば、レベルの隣接性(深度)を考慮に入れる必要がありますか? –