我有一个类别表
cat_id, cat_name, parent_id, cat_slug
我的文章表如下
art_id, cat_id, art_title, art_content, author_id .....
我的用户表格为
user_id, username, pw, .....
因此,对于这些数据,我想显示子类别
下列出的所有文章例如:
主要类别的网址是:mydomain.com/cat/business 子类别的网址是:mydomian.com/cat/business/advertising
因此,当人们访问主要类别时,即使cat_id未被提及为主要类别,它也应显示主类别上列出的子类别。我想在业务类别页面上列出业务子类别文章的所有子类别。
什么是查询,我应该尝试实现这个
帮助将不胜感激。感谢
答案 0 :(得分:4)
首先,获取您的类别......
如果您的类别嵌套只有两个级别(父级和子级),或者您只对直接子类别(即子类别的子类别)感兴趣,那么您的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))
等等......
答案 1 :(得分:0)
select * from category where parent_id=cat_id
对于给定的cat_id,它将为此获取所有sub_categories。