0

カテゴリとページのテーブルがあります。私のテーブルは構造は次のようなものです:

ページ 1 には 3 つの列があります

id | category_id | content
1         2        example page of subexample
2         1        example page of example

1 つに 4 つあるカテゴリ

id | is_parent | parent | name
1       1         NULL    example
2       0          1      subexample

そのカテゴリのすべてのページを取得したいのですが、親の場合は、そのサブカテゴリのメンバーであるページも含めたいです。

私が与えた例では、ユーザーが例のカテゴリの内容全体を見ることを選択したときに、例の例のページとサブ例の例のページを見てほしいと考えています。

$query = "SELECT * FROM `pages` WHERE `category_id` = :cid
union
select * from `pages` p
join `categories` k ON k.id = p.category_id
where k.parent = :cid";

上記のコードを試しましたが、うまくいきませんでした。私も私の論理に確信が持てません。

4

2 に答える 2

0
SELECT pages.* FROM pages,categories
WHERE pages.category_id=categories.id 
  AND (categories.id=:cid OR parent=:cid)
于 2013-07-22T22:03:38.883 に答える
0

あなたが試すことができます

SELECT * 
  FROM pages
 WHERE category_id IN
(
  SELECT c.id 
    FROM categories c LEFT JOIN categories p
      ON c.parent = p.id
   WHERE p.id = :cid OR c.id = :cid
)

また

SELECT * 
  FROM pages p
 WHERE category_id IN
(
  SELECT :cid
   UNION ALL
  SELECT id 
    FROM categories 
   WHERE parent = :cid
)

これがSQLFiddleのデモです

注: 1 レベルの深い意味のカテゴリとそのサブカテゴリでのみ機能します。サブカテゴリに他のサブカテゴリがある場合は、動的 SQL を使用してカテゴリ ツリーをトラバースする必要があります。

于 2013-07-22T22:05:41.960 に答える