新品価格 |
[書評]SQLアンチパターン1章を読んだ
の続編
2章もかなりためになりました
以下、SQL
・本章の内容
木構造のコメントを
どうやってSQLで処理するかという話
これ地味に困ってたので結構ためになりました
・アンチパターン
コメントの一個前のidを持っておく
一個ずつjoinしていくので結構時間かかると思う
SQLこんな感じ。
select c1.*, c2.*, c3.*, c4.*
from comments c1
left outer join comments c2
on c2.parent_id=c1.comment_id
left outer join comments c3
on c3.parent_id=c2.comment_id
left outer join comments c4
on c4.parent_id=c3.comment_id
・再帰クエリ
with 使うと再帰クエリが使えるとのこと
ちなみにmysqlで使えない
・pathを指定する
/1/2/3/4
みたいなpathをDBに入れて
likeで当てる
1以下すべて取りたいなら
/1 LIKE path + '%'
で取得できる。
ただしこの方法だと
insertするたびにメンテナンスが必要
・左右の枠を指定する
nsleftとnsrightを作って
その間にあるのが子ノードとするやり方。
insertするたびにメンテナンスが必要だが
nsleftとnsrightで子ノードを特定できるので
pathよりもメンテナンスが楽。
・管理テーブルを作る
親と子を管理するテーブルを作る
テーブルが一個余計にいるけど一番柔軟性が高い
孫とかもテーブルで管理する
非常に面白い章でした。
SQLアンチパターンは名著の予感がします。
ツリー構造のコメント作るの大変だったんですよね。
まだまだこの本は楽しめそうです
続く
タグ:SQL