Prev / Next / /home/pochi/ChangeLog

階層化されたデータをMySQLで扱う[computer]

2005-09-08

http://www.mysql.gr.jp/mysqlml/mysql/msg/12071
via http://apollo.u-gakugei.ac.jp/~sunaoka/clog/2005-09-04-1.html

以下のような構造で格納しとくと良いらしい。

 +-------------+----------------------+-----+-----+
 | category_id | name | lft | rgt |
 +-------------+----------------------+-----+-----+
 | 1 | ELECTRONICS | 1 | 20 |
 | 2 | TELEVISIONS | 2 | 9 |
 | 3 | TUBE | 3 | 4 |
 | 4 | LCD | 5 | 6 |
 | 5 | PLASMA | 7 | 8 |
 | 6 | PORTABLE ELECTRONICS | 10 | 19 |
 | 7 | MP3 PLAYERS | 11 | 14 |
 | 8 | FLASH | 12 | 13 |
 | 9 | CD PLAYERS | 15 | 16 |
 | 10 | 2 WAY RADIOS | 17 | 18 |
 +-------------+----------------------+-----+-----+


リーフノードを探すには以下のようにする。

SELECT name
FROM nested_category
WHERE rgt = lft + 1;


ツリー構造の処理は、言語処理系に頼ってゴリゴリ処理する、
というのは普通な気がするけど、一般的なDBを経由して使える、
というのは結構おいしい気がする。

permlink