• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:2回SELECTせずにすむ方法?)

2回SELECTせずにすむ方法は?

このQ&Aのポイント
  • ブログのエントリーデータから親カテゴリーと子カテゴリーを効率的に抽出する方法を知りたい。
  • 現在は2回SELECT文を使用しているが、冗長な気がする。
  • テーブル構成やより良い方法があれば教えてほしい。

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.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

re999
質問者

お礼

回答ありがとうございました。 「自己結合」という言葉、初めて聞きました。 参考リンクもご提示いただいたので、これから勉強していきたいと思いますー

その他の回答 (1)

回答No.1

SELECT * FROM category where category_id = :category_id or category_id in(SELECT parent_id FROM category where category_id = :category_id) でどうでしょうか。

re999
質問者

補足

回答ありがとうございました。 大変参考になりましたー

関連するQ&A