ご存知のとおり、階層クエリの一般的なテーブルには、親 ID のフィールドが必要です。これは通常、parent_id で表されます。検索の便宜のために、ほとんどの企業は、現在のレベルのステータスを記録するパス フィールドを設定します。現在のレベルを証明するための現在の階層チェーン内の位置。
現在のパスの情報があれば、その配下をすべて取得するのは比較的簡単です。右側をファジーマッチするだけで済みますが、現在の上位チェーンをすべて取得したい場合は、より複雑になります。上位階層には複数の配下が存在する可能性があり、現在のブランチの 1 つにすぎないため、チェーンを取得したい場合はさらに面倒になり、データベースを繰り返し呼び出して取得することは不可能です。次に、それを取得する方法を示します。
栗を取ります:
# 获取当前组织所有子组织path,#{path}是咱们自己传入的参数,为了不影响整体性,用引号包了起来
SELECT path FROM organization WHERE path LIKE CONCAT('000001', '%') and deleted = 0;
# 获取当前组织所有上级组织链中的组织path,#{path}是咱们自己传入的参数,为了不影响整体性,用引号包了起来
SELECT path FROM organization WHERE '000001' LIKE CONCAT(path, '%') and deleted = 0;
上記 2 つの SQL 実行で返された結果を示します。
- 最初の SQL が実行された後、結果が表示されます
- 2 回目の SQL 実行が完了すると結果が表示されます
注:
クエリが上位であっても下位であっても、クエリ自体が含まれており、クエリ自身で処理する必要があることに注意してください。