特定のカテゴリの情報と、それらのカテゴリのサブカテゴリにあるすべてのトピックを検索したい場合があります。クエリに各サブカテゴリの category_id を追加することもできますが、カテゴリ/サブカテゴリの設定によっては、かなり長いリストになる可能性があります。![]()
別の方法として、categories テーブルを結合し、OR を使用します。
(値を親カテゴリの値に変更することを忘れないでください)
SELECT
t.category_id,
t.id AS topic_id
FROM topics t
JOIN categories c ON c.id = t.category_id
WHERE (c.id = 5 OR c.parent_category_id = 5)
パラメータを使用してこれを行うこともできます。
-- [params]
-- int :category_id
SELECT
t.category_id,
t.id AS topic_id
FROM topics t
JOIN categories c ON c.id = t.category_id
WHERE (c.id = :category_id OR c.parent_category_id = :category_id)
また、複数のカテゴリとサブカテゴリに対応するには、パラメータを int_list バージョンに切り替えて、次のように IN を使用するようにクエリを適応させることができます。
-- [params]
-- int_list :category_id
SELECT
t.category_id,
t.id AS topic_id
FROM topics t
JOIN categories c ON c.id = t.category_id
WHERE (c.id IN (:category_id) OR c.parent_category_id IN (:category_id))
または、クエリ自体に親カテゴリをハードコーディングします。
SELECT
t.category_id,
t.id AS topic_id
FROM topics t
JOIN categories c ON c.id = t.category_id
WHERE (c.id IN (4, 5) OR c.parent_category_id IN (4, 5))
これらのクエリは、主に原則を説明するための例です。お役に立てれば幸いです。ご不明な点がございましたら、下記までお気軽にお問い合わせください。![]()