首先,要获取您的类别...
如果您的类别嵌套只有两个级别(父级和子级)或者您只对直接子类别感兴趣(即不是子类别的子类别),那么您的 SQL 非常简单:
SELECT cat_id FROM category_table WHERE cat_id = $catid OR parent_id = $catid
如果您的嵌套更深,那么您需要递归查询到您的类别嵌套为止。例如,如果您将自己限制在 3 个级别,您可以使用 SQL 执行此操作,如下所示:
SELECT cat_id FROM category_table ct1
WHERE cat_id = $catid OR parent_id = $catid
OR parent_id in (SELECT cat_id FROM category_table WHERE parent_id = ct1.cat_id)
同样,对于 4 级深度嵌套,您可以使 SQL 更加复杂:
SELECT cat_id FROM category_table ct1
WHERE cat_id = $catid OR parent_id = $catid
OR parent_id in (SELECT cat_id FROM category_table ct2 WHERE parent_id = ct1.cat_id
OR parent_id in
(SELECT cat_id FROM category_table ct3 WHERE parent_id = ct2.cat_id))
等等。
如果您没有固定的嵌套深度,则需要在代码中进行循环。
拥有所有类别后,您就可以查询文章。所以对于一个简单的 2 级依赖,你会得到
SELECT * FROM article_table
WHERE cat_id in (SELECT cat_id FROM category_table WHERE cat_id = $catid OR parent_id = $catid)
同样,对于 3 级嵌套,您将得到
SELECT * FROM article_table
WHERE cat_id in
(SELECT cat_id FROM category_table ct1
WHERE cat_id = $catid OR parent_id = $catid
OR parent_id in (SELECT cat_id FROM category_table WHERE parent_id = ct1.cat_id))
等等...