Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在主类别中显示子类别的文章_Php_Mysql - Fatal编程技术网

Php 在主类别中显示子类别的文章

Php 在主类别中显示子类别的文章,php,mysql,Php,Mysql,我有一张分类表 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/adv

我有一张分类表

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/advisting

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

问题是什么,我应该努力做到这一点

我们将不胜感激。谢谢

select * from category where parent_id=cat_id
在这里,对于一个给定的cat_id,它将获取该类的所有子类


在这里,对于给定的cat\u id,它将获取此的所有子类别。

首先,要获取您的类别

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

SELECT * FROM article_table
WHERE cat_id in (SELECT cat_id FROM category_table WHERE cat_id = $catid OR parent_id = $catid)
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))

等等…

首先,获取您的类别

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

SELECT * FROM article_table
WHERE cat_id in (SELECT cat_id FROM category_table WHERE cat_id = $catid OR parent_id = $catid)
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))

等等……

在数据库中“子类别”在哪里?子类别嵌套的深度有多深?@DaOgre它在类别表中:OP有
父类别id
,我假设,对于顶级类别,它将
为null
,否则将包含父类别id。听起来是一个非常简单的查询。当您在类别$cat
$query=从文章a、类别c中选择a.art\u,其中c.cat\u id=a.cat\u id和c.parent\u id='$cat'";
@AleksG Sub-category是1级深度数据库中的“Sub-category”在哪里?Sub-category嵌套的深度可以有多深?@DaOgre它在category表中:OP在那里有
parent\u id
,我假设,对于顶级类别,将为
null
,否则将包含父类别id。听起来是一个非常简单的查询。当您在类别$cat
$query=从文章a、类别c中选择a.art\u,其中c.cat\u id=a.cat\u id和c.parent\u id='$cat'";
@AleksG子类别为1级深度您是在建议我,首先查询cat表,然后根据查询的cat表获取文章?Thanks@sammry不,你可以一次完成。我只是解释了原因。把我的帖子通读到底。不,这对我不起作用,我想,我做错了什么,或者可能超出了逻辑框架。你是在建议我,首先查询cat表,然后根据查询到的cat表获取文章?Thanks@sammry不,你可以一次完成。我只是解释了原因。把我的帖子通读到底。不,我认为这对我不起作用,我做错了什么,或者可能不合逻辑