0

我有类别和页面表。我的表结构是这样的:

第一页有三列

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

一类有四

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演示

注意:它仅适用于一级深层含义类别及其子类别。如果一个子类别有其他子类别,那么您需要使用动态 SQL 来遍历类别树。

于 2013-07-22T22:05:41.960 回答