テーブルとツリー問題の続きである。
あまりにもあっさりと解決した。というか、データベースを使っているのだから、問題にすらならないのである。
ルートカテゴリは "select * from category where parent=0;" で抽出することができる。抽出されたレコード "プログラム言語" のサブカテゴリは、同じく parent の値が 1 であるレコードを検索することで抽出できるのである。後はこの抽出→検索の連鎖を再帰にしてしまえばよいので、コードもシンプルなモノになる。解かってみればたいしたことない、の典型例だ。
これまで CSV データを読み込んでそれを処理するというプログラムを多く書いてきたので、どうしてもテーブルはすべて読み込んで処理するモノ、という思い込みがあった。しかしこれはデータベースのテーブルであり、条件抽出などあっさりやってくれるのである。このあたりに無用にことをややこしく考えた敗因がある。
柔軟にならなくては。