我有类别和页面表。我的表格结构是这样的:
第一页有三列
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";
我已经尝试了上面的代码,但不适合我。我也不确定我的逻辑。
答案 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遍历类别树。