【问题标题】:Display Articles of Sub Categories in a Main Category PHP MYSQL显示主分类中子分类的文章 PHP MYSQL
【发布时间】:2012-09-27 14:44:02
【问题描述】:

我有一个类别表

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 子类别的url是:mydomian.com/cat/business/advertising

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

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

我们将不胜感激。谢谢

【问题讨论】:

  • 您的数据库中的“子类别”在哪里?
  • 子类嵌套可以有多深?
  • 听起来像一个非常简单的查询。当您在 $cat 类别中时 $query = SELECT a.art_whatever FROM articles a, categories c WHERE c.cat_id = a.cat_id AND c.parent_id = '$cat'";
  • @AleksG 子类别深度为 1 级

标签: php mysql


【解决方案1】:

首先,获取您的类别...

如果您的类别嵌套只有两层深度(父级和子级),或者您只对直接子类别感兴趣(即不是子类别的子类别),那么您的 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))

等等……

【讨论】:

  • 你是在建议我,我先查询 cat 表,然后根据查询到的 cat 表获取文章?谢谢
  • @sammry 不,您可以一口气完成所有操作。我只是解释了原因。将我的帖子通读到底。​​span>
  • 不,它不适合我,我认为,我做错了什么或者可能超出了逻辑框
【解决方案2】:
select * from category where parent_id=cat_id

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-24
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 2017-10-11
    相关资源
    最近更新 更多