この記事の紹介する方法だと、仕様で階層が深くなるようになったとしても対応できます。
もくじ
こういうデータがあったとする
categories
id, parent_id, name 1, 3, カテゴリ1 2, null, カテゴリ2 3, 2, カテゴリ3 4, null, カテゴリ4 5, 3, カテゴリ5
階層を表すとこう
3-1-5 2-3-5 4
SQL
select c1.*, c2.*, c3.* from categories c1 left join nodes c2 on c2.parent_id = c1.id -- 1階層 left join nodes c3 on c3.parent_id = c2.id -- 2階層 ... where c1.id = 3;
再起的になってしまう場合が起こりうるので、
アプリ実装で気をつける
- joinする回数を決める
ex. 2階層までとする、など仕様を決める - 紐づける時に再起的にならないようにする