- ベストアンサー
2回SELECTせずにすむ方法は?
- ブログのエントリーデータから親カテゴリーと子カテゴリーを効率的に抽出する方法を知りたい。
- 現在は2回SELECT文を使用しているが、冗長な気がする。
- テーブル構成やより良い方法があれば教えてほしい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
SELECT文ですが、子カテゴリーの parent_id と親カテゴリーの category_id で自己結合するのが簡単かと。 なお、テーブルの行数が多いと性能的な問題が出てくるかも知れません。 例) ------------------------------------ SELECT cld.category_id AS child_category_id, cld.parent_id AS child_parent_id, cld.other_data AS child_other_data, ・ ・ ・ prt.category_id AS parent_category_id, prt.parent_id AS parent_parent_id, prt.other_data AS parent_other_data, ・ ・ ・ FROM category cld LEFT OUTER JOIN category prt ON cld.parent_id = prt.category_id WHERE cld.category_id = :category_id; ---------------------------------------- テーブル構造ですが、0~1の親を持つカテゴリー階層はツリー構造の一種ですから、下記の記事が参考になると思います。 http://www.geocities.jp/mickindex/database/db_tree_ns.html http://www.geocities.jp/mickindex/database/db_tree_pe.html http://gihyo.jp/dev/serial/01/sql_academy2/000601
その他の回答 (1)
- 原沢 信道(@nharasawa)
- ベストアンサー率53% (90/168)
SELECT * FROM category where category_id = :category_id or category_id in(SELECT parent_id FROM category where category_id = :category_id) でどうでしょうか。
補足
回答ありがとうございました。 大変参考になりましたー
お礼
回答ありがとうございました。 「自己結合」という言葉、初めて聞きました。 参考リンクもご提示いただいたので、これから勉強していきたいと思いますー