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不,你可以一次完成。我只是解释了原因。把我的帖子通读到底。不,我认为这对我不起作用,我做错了什么,或者可能不合逻辑