我有类别和页面表。我的表结构是这样的:
第一页有三列
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";
我已经尝试过上面的代码,但对我不起作用。我也不确定我的逻辑。
最佳答案
你可以试试
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 来遍历类别树。
关于MySQL 加入子类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17798101/