我有一个帖子表(id,category_id,...),然后是JOIN
,类别表为(category_id,category_name,parent,...)ON category_id
。 Parent是另一个类别的category_id。例如:
category_id category_name parent
1 Computer Science NULL
2 Web Technology 1
3 Mathematics NULL
4 PHP 2
我如何JOIN
发布帖子和类别表来阅读帖子的父类别。例如,
id category_id post_title
44 4 something
使用简单的JOIN
ON category_id,我只能将PHP作为类别;我如何才能将父母视为Computer Science > Web Technology > PHP
?
注意:我使用mysql和MyISAM引擎。
答案 0 :(得分:2)
只需为额外元素执行额外的连接,但将IT作为LEFT连接,因为并非所有类别都具有父类别,并且您不想排除这些类别。
select
P.ID,
P.Post_Title,
P.Category_ID,
C.Category_Name as FirstCat,
C.Parent,
COALESCE( C2.Category_Name, ' ' ) as ParentCategory
from
Posts P
JOIN Categories C
on P.Category_ID = C.Category_ID
LEFT JOIN Categories C2
on C.Parent = C2.Category_ID
where
AnyFiltering
答案 1 :(得分:1)
如果您愿意限制深度,可以使用UNION
叠加JOIN
来获得您想要的内容。这是一个3级深度实现:
select * from posts
where category_id = ?
union
select * from posts p
join category c on c.category_id = p.category_id
where c.parent = ?
union
select * from posts p
join category c1 on c1.category_id = p.category_id
join category c2 on c2.category_id = c1.parent
where c2.parent = ?
您将为所有3个占位符传递(对于您感兴趣的类别)相同的变量。