MySQL加入子类别

时间:2013-07-22 21:52:57

标签: mysql join union

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

第一页有三列

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";

我已经尝试了上面的代码,但不适合我。我也不确定我的逻辑。

2 个答案:

答案 0 :(得分:0)

SELECT pages.* FROM pages,categories
WHERE pages.category_id=categories.id 
  AND (categories.id=:cid OR parent=:cid)

答案 1 :(得分: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遍历类别树。