なぜ再帰問い合わせが必要になったか

うちのブログがidとparent_idで木構造を表現しているが、 ぶら下がってる全ての記事一覧を取得したい。

それにはSQLで定義されているWith句を利用すれば良いが、 MySQLではまだ未実装らしい(2011/02時点)

しかし、再帰問い合わせなんて単語を知らなかったので、 調査ついでにまとめてみた。

WITH句に関しての説明

新しい業界標準「SQL99」詳細解説 http://www.atmarkit.co.jp/fnetwork/tokusyuu/01sql99/sql99_1b.html

ぐぐった結果

PHPとMySQLでツリー構造を扱う

http://aratanuki.blog100.fc2.com/blog-entry-82.html これはPHPでクエリーを都度投げる方法。 この記事ではmysqli::prepare()を使っている。 これを参考に実装するならば、まず親記事の一覧を作成し、 「WHERE parent_id IN (親記事の一覧)」として記事の一覧を取得してくる感じか…

子要素を再帰的に取ってくるストアドプロシージャ

http://blog.udzura.jp/2010/08/21/recursive-stored-procedure/ ストアドプロシージャ? 一時的にテーブルを作成し、結果をどんどん投げ込んでから再度検索しなおす感じか?

結論

MySQLで再帰問い合わせは難しい ブログに使うのは諦めた