1

我有一个类别表

cat_id, cat_name, parent_id, cat_slug

我的文章表如下

art_id, cat_id, art_title, art_content, author_id .....

我的用户表为

user_id, username, pw, .....

所以有了这些数据,我想显示子类别下列出的所有文章

例如:

主类 url 为:mydomain.com/cat/business 子类 url 为:mydomian.com/cat/business/advertising

因此,当人们访问主类别时,即使 cat_id 没有作为主类别提及,它也应该在主类别上显示列出的子类别文章。我想在业务类别页面上列出业务子类别文章的所有子类别。

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

帮助将不胜感激。谢谢

4

2 回答 2

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))

等等...

于 2012-09-27T14:50:39.533 回答
0
select * from category where parent_id=cat_id

这里对于给定的 cat_id,它将为此获取所有子类别。

于 2012-09-27T14:48:55.200 回答