在主要类别PHP MYSQL中显示子类别的文章

时间:2012-09-27 14:44:03

标签: php mysql

我有一个类别表

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未被提及为主要类别,它也应显示主类别上列出的子类别。我想在业务类别页面上列出业务子类别文章的所有子类别。

什么是查询,我应该尝试实现这个

帮助将不胜感激。感谢

2 个答案:

答案 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。